|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
что то я после оракла слегка в ступоре: innodb табличка с одним autoincrement pk полем, параллельные тразакции инсертят в нее в стиле insert into ... select несколько строк. pk поле не упоминаю, оно типа заполняется само. и тут я получаю дедлок, как я понимаю одна из вариаций вот этого: https://dba.stackexchange.com/questions/28058/how-to-analyse-innodb-status-on-deadlock-in-insert-query/28289#28289 а как с этим жить? мне как бы и нечего сортировать, pk назначает мне autoincement ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2019, 17:10 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
запрос? граф дедлока? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2019, 13:53 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
ScareCrowзапрос? граф дедлока? я удалил пока пк и проблема спустилась чуть ниже по транзакции. и она продолжает ставить меня в тупик: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
как я понимаю столкнулись два UPDATE на таблицу deal_product_rows. но не поделил они чтение из deal_product_rows_tmp ? innodb же вроде версионник, откуда в таких запросах могут взяться блокировки на deal_product_rows_tmp ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2019, 22:47 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
deal_product_rows_tmp тоже innodb? ps подробностей уже не помню, но сталкивался с тем, что подзапросы вида where exists/not exists (select ) блокировали таблицу, указанную в подзапросе ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 05:29 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
Дегтярев Евгенийdeal_product_rows_tmp тоже innodb? ps подробностей уже не помню, но сталкивался с тем, что подзапросы вида where exists/not exists (select ) блокировали таблицу, указанную в подзапросе тоже innodb. тут вычитал что при отсутствии pk innodb начинает свои GEN_CLUST_INDEX индексы строить и эта стройка может рандомно дедлочить. ладно, вернул взад примарные ключи, но ситуация вернулась к еще большему абсурду Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 09:38 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
start transaction isolation level read committed update .... commit ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 09:50 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
вторая транзакция "lock_mode X locks rec but not gap". авторHere's what's happening: Transaction 2 gets a lock for the (index) record but not the gap before the record ('rec but not gap'), i.e. it has a record lock only. Transaction 1 tries to get a lock on the record and the gap before (i.e. a next-key lock), but can't because transaction 2 has a record lock (and so transaction 1 waits). Transaction 2 tries to get a lock on the record and the gap before (i.e. a next-key lock) and can't because Transaction 1 is already waiting for the same lock and is ahead of it in the queue. Deadlock. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 09:56 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
ScareCrowstart transaction isolation level read committed update .... commit сначала бы хотелось понять суть проблемы. так как глючат совершенно разные запросы. от инсертов до апдейтов с exists. откуда может быть дедлок при row level locking ? откуда может быть дедлок если им нужна одна и та же страница индекса ? один ставит лок, второй ждет, где дедлок ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 09:59 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
авторкак у него RECORD LOCK на разные строки столкнулись друг с другом по умолчанию уровень изоляции repeatable read - а он требует еще и локов на диапазоны, а не только на саму запись. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 09:59 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
ScareCrowавторHere's what's happening: Transaction 2 gets a lock for the (index) record but not the gap before the record ('rec but not gap'), i.e. it has a record lock only. Transaction 1 tries to get a lock on the record and the gap before (i.e. a next-key lock), but can't because transaction 2 has a record lock (and so transaction 1 waits). Transaction 2 tries to get a lock on the record and the gap before (i.e. a next-key lock) and can't because Transaction 1 is already waiting for the same lock and is ahead of it in the queue. Deadlock. если тут lock on the record имеется ввиду лок на конкретную строку то тут описывается примитивный дедлок, где транзакции дерутся за одну и ту же строку. у меня транзакции вообще не пересекаются никак. у меня каждая транзакция удаляет свой набор строк ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 10:04 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
авторtries to get a lock on the record a nd the gap before (i.e. a next-key lock) https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html#innodb-next-key-locks ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 10:06 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
ScareCrowавторкак у него RECORD LOCK на разные строки столкнулись друг с другом по умолчанию уровень изоляции repeatable read - а он требует еще и локов на диапазоны, а не только на саму запись. допустим. а откуда тогда дедлок ? одна транзакция ставит, другая ждет. в чем сложности? может он ставит лок по одной записи на кусок диапазона ? почему в сообщении RECORD LOCK ? RECORD LOCKS space id 219 page no 3 n bits 168 index `PRIMARY` выглядит что транзакция 1 ставит на все строки страницы индекса RECORD LOCK в одном направлении, а транзакция 2 ставит на каждую в другом направлении. какой-то абсурд. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 10:10 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
авторкакой-то абсурд. авторпо умолчанию уровень изоляции repeatable read - а он требует еще и локов на диапазоны ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 10:16 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
авторвычитал что при отсутствии pk innodb начинает свои GEN_CLUST_INDEX индексы строить при отсутствии первичного innodb сам создает его, он всегда кластерный зы давай уже версию сервера, DLL таблиц, autocommit или явное управление транзакциями, уровень изоляции таблиц ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 10:22 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
ScareCrowавторкакой-то абсурд. авторпо умолчанию уровень изоляции repeatable read - а он требует еще и локов на диапазоны я ж не возражаю. раз repeatable read пусть будет лок на диапазон. один ставит, другой ждет. дедлок то откуда ? Дегтярев Евгенийпри отсутствии первичного innodb сам создает его, он всегда кластерный зы давай уже версию сервера, DLL таблиц, autocommit или явное управление транзакциями, уровень изоляции таблиц транзакция из java/spring, дефолтная, repeatable read, метод помечен @Transactional анатацией. сервер google cloud mysql gen 1 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2019, 10:36 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
hck1, на read committed та же ботва, два делита и точно такой-же дедлок: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2019, 08:33 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
запросы покажи? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 22:34 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
ScareCrowзапросы покажи? выше показывал и запросы и дедлок . все то же самое на IL read committed Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 09:20 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
ddl таблиц покажи. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 10:00 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
ScareCrowddl таблиц покажи. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 10:54 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
Код: sql 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 11:36 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
ScareCrow, Код: plaintext 1. 2. 3. 4. 5. 6. 7.
не знаю на сколько это имеет значение для предполагаемого плана, но сейчас в табличке то пусто. то что было наинсерчено батчем 5846 убрал роллбэк убитой дедлоком транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 11:50 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
так у тя дедлок не на двух делетах? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 11:53 |
|
Deadlock на insret нескольких строк из-за autoincrement
|
|||
---|---|---|---|
#18+
ScareCrowтак у тя дедлок не на двух делетах? вопрос не понял, но вот в этом логе фигурирует два DELETE https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312130&msg=21883030 DELETE FROM deal_product_rows_tmp WHERE batch_no=5845 DELETE FROM deal_product_rows_tmp WHERE batch_no=5846 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 11:57 |
|
|
start [/forum/topic.php?fid=47&fpage=35&tid=1829138]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
100ms |
get tp. blocked users: |
1ms |
others: | 311ms |
total: | 490ms |
0 / 0 |