Превышено время ожидания блокировки MySQL - PullRequest
4 голосов
/ 20 января 2010

Я получил ошибку Lock wait timeout exceeded; try restarting transaction. Каковы причины этого и как решить проблему? К вашему сведению: innodb_lock_wait_timeout = 100 в конфигурационном файле MySQL.

Ответы [ 2 ]

6 голосов
/ 20 января 2010

Это проблема конкуренции за блокировку , которая в конечном итоге приводит к тайм-ауту одной из блокировок. Вот несколько предложений:

  • Убедитесь, что у вас есть правильные индексы, в результате чего блокировки на уровне строк не блокируются блокировки на уровне таблицы . Это уменьшит раздор.
  • Убедитесь, что у вас есть индексы для ограничения внешний ключ . Чтобы проверить реляционные ограничения во время insert или update, некоторые базы данных блокируют всю ссылочную таблицу, если такого индекса нет (не знаю, так ли это в MySQL)
  • Если проблема все еще здесь, попробуйте сделать транзакцию быстрее / меньше. Опять же, это уменьшит конкуренцию в базе данных.
  • Увеличить время ожидания, но сохранить разумное значение
0 голосов
/ 20 января 2010

Происходит ли это в системе с высоким трафиком, где транзакции занимают много времени (т. Е. Таблицы заблокированы на долгое время)? Если это так, вы можете посмотреть код транзакции, чтобы сделать его короче / более детализированным / более производительным.

...