У меня есть ошибка Lock wait timeout exceeded; try restarting transaction
. Каковы причины этого и как решить проблему? FYI: innodb_lock_wait_timeout = 100
в конфигурационном файле MySQL.Ошибка ожидания ожидания блокировки MySQL
4
A
ответ
6
Это проблема Заблокирован замок, что в конечном итоге приводит к тайм-ауту на одном из замков. Вот несколько предложений:
- Убедитесь, что правильные индексы, которые приводят к уровню строк замков не уровня таблицы замка. Это уменьшит конкуренцию.
- Удостоверьтесь, что у вас есть указатели на внешний ключ ограничений. Чтобы проверить реляционные ограничения во время
insert
илиupdate
, некоторая база данных блокирует всю ссылочную таблицу, если такого индекса нет (не знаю, относится ли это к MySQL) - Если проблема все еще здесь, попробуйте сделать транзакцию быстрее/меньше. Опять же, это уменьшит конкуренцию в базе данных.
- Увеличение таймаута, но сохранить значение приемлемым
0
Это происходит в системе с высоким уровнем трафика, где транзакции занимают много времени (т. Е. Таблицы заблокированы в течение длительного времени)? Если это так, вы можете посмотреть код транзакции, чтобы сделать их более короткими/более гранулированными/более эффективными.