История тупиков InnoDB - PullRequest
       29

История тупиков InnoDB

0 голосов
/ 20 ноября 2018

После изменения кода моя база данных сообщает о множестве взаимоблокировок, которые разрешаются через некоторое время (1 SHOW ENGINE INNODB STATUS для просмотра того, что произошло, но информация неверна: представленные здесь операторы и таблицы отличаются от того, что я вижу в таблице INNODB_LOCKS (когда она еще не решена).

Вопрос в следующем: как мне получить историю, журнал, о каких тупиках произошло?не только самый последний.

1 Ответ

0 голосов
/ 20 ноября 2018
innodb_print_all_deadlocks = ON

SHOW ENGINE INNODB STATUS является переходным процессом;вышесказанное должно сохранить его путем записи в файл журнала.

Я рекомендую несколько вещей, чтобы уменьшить количество взаимоблокировок:

  • Делайте то же самоезаказ в разных транзакциях.Это включает в себя, какие строки касаются.
  • Ускорить код.(Лучшие индексы, часто «составные», переформулируют запросы и т. Д.)
  • Проверьте, можно ли что-нибудь разумно извлечь из BEGIN ... COMMIT.

ДляДля дальнейшего обсуждения, пожалуйста, покажите нам SQL в транзакции, плюс SHOW CREATE TABLE для соответствующих таблиц.

В любом случае проверяйте наличие ошибок в каждой транзакции и будьте готовы к воспроизведению при попадании в тупик.

Примечание: lock_wait_timeout является связанным элементом.По умолчанию это неоправданно высокие 50 секунд.Если вы поднимаете это, вы просите больше проблем.Уменьшение его (скажем, до 5) не является реальным решением, но оно может изменить проблемы интересным образом.Опять тестируйте на ошибки и реагируйте на них.Попадание в этот «тайм-аут» так же плохо, как и «тупик».Не ударить, а ждать - это тихий способ успешного разрешения конфликтов InnoDB.

...