Магазин mysql тупиков - PullRequest
0 голосов
/ 07 ноября 2018

Мне было интересно, есть ли способ сохранить каждую транзакцию, которая вызывает взаимоблокировку в базе данных mysql в отдельной таблице в момент ее записи в innodb?

1 Ответ

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

В версии 5.5.30 innodb_print_all_deadlocks стало доступным. Установите его на ON, но имейте в виду, что используемый им файл журнала (вероятно, error.log) может загромождать диск.

Техники для уменьшения количество тупиков:

  • Ускорение транзакций.
  • Удалите операторы DML из транзакции (когда это нормально).
  • Если в каком-либо операторе есть IN или OR (например, DELETEing несколько строк), отсортируйте их.

Последняя может превратить тупик в "locK_wait_timeout", в котором одна из транзакций молча останавливается, пока другая не завершится.

...