перевиконано час очікування блокування mysql Lock; спробуйте перезапустити транзакцію


26

ми запускаємо Java-додаток, працюємо на віки, задній кінець - це 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;

тепер ви можете вбити цю нитку або дочекатися її завершення.



Дякуємо за цю інформацію, але як можна дістатись до кореня проблеми, коли блокування не відбувається, навіть у дуже простих таблицях з невеликими оновленнями (наприклад, збільшення або оновлення одного поля).
Wouter

-1

Якщо ви використовуєте MySQL версії менше 5,0, ви не можете змінити змінну навіть для сеансу або глобальної області застосування. Найкраще рішення - захопити запит та виконати його після того, як трафік повільний.


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