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


12

Я получаю эту ошибку неоднократно ежедневно 4 - 5 раз.

SQLSTATE [HY000]: общая ошибка: 1205 Превышено время ожидания блокировки; попробуйте перезапустить транзакцию

На этот раз я перезагружаю свой phpmyadmin, но это происходит снова и снова. Я не могу указать на эту проблему.

Я использую Magento вер. 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.