mysql Превышено время ожидания блокировки; попробуйте перезапустить транзакцию
26
мы работаем с Java-приложением, работаем целую вечность, back end - это MySQL, недавно обновленный до mysql 5.6. Все работало нормально, на прошлой неделе началось сообщение об ошибке Превышено время ожидания блокировки; попробуйте перезапустить транзакцию, которая выглядит так, как будто никогда не прекращается, не знаю, что делать с этой ошибкой для остановки. почему это происходит внезапно
Вы можете установить переменную innodb_lock_wait_timeout = 100 для времени блокировки до 100 сек.
mysql>set innodb_lock_wait_timeout=100;
Query OK,0rows affected (0.02 sec)
mysql> show variables like'innodb_lock_wait_timeout';+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| innodb_lock_wait_timeout |100|+--------------------------+-------+
Транзакция, для которой истекло время ожидания, попытайтесь заблокировать таблицу, которая удерживается другим процессом. и ваша переменная таймаута установлена с небольшим количеством секунд. так что показывает ошибку. Вы можете увидеть больше статуса с помощью команды.
SHOW ENGINE INNODB STATUS\G
Вы можете увидеть список заблокированных таблиц
show open tables where in_use>0;
Теперь посмотрите поток, который использует эту таблицу
show full processlist;
Теперь вы можете убить этот поток или подождать, пока он не завершится.
Спасибо за эту информацию, но как найти причину проблемы, когда блокировки продолжают происходить, даже для очень простых таблиц с небольшими обновлениями (такими как увеличение или обновление одного поля).
Воутер
-1
Если вы используете версию MySQL менее 5.0, вы не сможете изменить переменную даже для сеанса или глобальной области видимости. Лучшее решение - захватить запрос и выполнить его после медленного трафика.
Если вы используете версию MySQL менее 5.0, вы не сможете изменить переменную даже для сеанса или глобальной области видимости. Лучшее решение - захватить запрос и выполнить его после медленного трафика.
источник