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


12

Я отримую цю помилку повторно щодня 4 - 5 разів.

SQLSTATE [HY000]: Загальна помилка: 1205 перервано час очікування блокування; спробуйте перезапустити транзакцію

Цього разу я перезапускаю phpmyadmin, але це відбувається знову і знову. Я не в змозі вказати на цю проблему.

Я використовую Magento ver. 1.9.0.1 на веб-сайті. У мене 7000+ продуктів. У сервері у мене є 16 Гб оперативної пам’яті.

Як виправити це питання?

Відповіді:


8

Ви повинні розглянути можливість збільшення значення очікування очікування блокування для InnoDB, встановивши innodb_lock_wait_timeout , за замовчуванням - 50 сек.

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
+--------------------------+-------+
1 row in set (0.01 sec)

Ви можете встановити його більш високе значення, /etc/my.cnfпостійно за допомогою цього рядка

[mysqld]
innodb_lock_wait_timeout=120

і перезапустити mysql. Якщо ви не можете перезапустити mysql наразі, запустіть це:

SET GLOBAL innodb_lock_wait_timeout = 120; 

Ви також можете просто встановити його протягом тривалості сеансу

SET innodb_lock_wait_timeout = 120; 

за вашим запитом


3
чому б не 140 'або 2000'? як це насправді могло вирішити питання? приховуючи його?
Ельцо Валугі

у вас є проблема, через яку таблиці блокуються більше, ніж розумно очікувалося. Якщо ви це зробите, ви змушуєте себе чекати 2 хвилини кожен раз, а не виправляти проблему один раз. І як каже Ельзо ... що станеться, коли 120 недостатньо?
Карлос Роблесс

7

Ви побачите це повідомлення, якщо вміст бази даних, до якого ви намагаєтеся отримати доступ, був заблокований (як правило, тривалим) попереднім процесом. MySQL буде чекати певний час, щоб замок був видалений, перш ніж він видасть і видалить цю помилку. Якщо ви в змозі відстежувати, коли ви бачите ці повідомлення про помилки до будь-якого послідовного часу дня, слід переглянути, що ще робить сервер на той момент - наприклад, працює резервна копія бази даних. Роблячи це, ви повинні бути в змозі звузити можливості для того, які процеси можуть створювати блокування, хоча це не завжди так прямо - це може бути трохи спроб і помилок.


5

Причина цього питання полягає в тому, що у вас запущено багато користувацьких сценаріїв та вбивство скриптів до того, як з'єднання з базою даних отримає шанс закритись.

Щось блокує виконання запиту. Швидше за все, інше оновлення запиту, вставлення або видалення з однієї з таблиць вашого запиту. Ви повинні з'ясувати, що це:

Якщо ви можете увійти в MySQL з CLI і запустіть наступну команду

SHOW PROCESSLIST;

Як тільки ви знайдете процес блокування / сну, знайдіть його idта запустіть:

KILL {id};

Повторно запустіть свій початковий запит.

Можливо, це посилання допоможе вам: SQLSTATE [HY000]: Загальна помилка: 1205 Перебіг часу очікування блокування; спробуйте перезапустити транзакцію Magento .


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.