mysql Превышено время ожидания блокировки; попробуйте перезапустить транзакцию


26

мы работаем с Java-приложением, работаем целую вечность, back end - это MySQL, недавно обновленный до mysql 5.6. Все работало нормально, на прошлой неделе началось сообщение об ошибке Превышено время ожидания блокировки; попробуйте перезапустить транзакцию, которая выглядит так, как будто никогда не прекращается, не знаю, что делать с этой ошибкой для остановки. почему это происходит внезапно

Ответы:


29

Вы можете установить переменную innodb_lock_wait_timeout = 100 для времени блокировки до 100 сек.

mysql> set innodb_lock_wait_timeout=100;

Query OK, 0 rows 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, вы не сможете изменить переменную даже для сеанса или глобальной области видимости. Лучшее решение - захватить запрос и выполнить его после медленного трафика.


2
ОП говорит, что они используют 5,6, что (я полагаю) 5,0 или выше.
RDFozz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.