Превышено время ожидания блокировки Mysql при запросе на обновление
В базе данных производственного сервера процедура запускается планировщиком ежедневно, в этой Процедуре у меня есть несколько операторов удаления и обновления.
но это вызывает ошибку превышения времени ожидания блокировки, превышенную иногда при 1 обновлении, которое использует некоторые часто используемые таблицы.
Первоначально innodb_lock_wait_timeout составлял 50 секунд, затем я изменил его на 100, поэтому проблема была решена в течение некоторого времени, но затем снова возникла ошибка, поэтому я изменил ее на 120, снова она была решена временно. Теперь я установил 150 секунд для глобального и установил 200 в сеансе (в процедуре). это работает отлично от нескольких дней.
Но эта процедура очень важна, получение ошибки создает проблемы, поскольку в ней есть очень важные данные.
так есть ли другое решение, которое может быть постоянным решением этой проблемы?
Я новичок, пожалуйста, помогите.
PS Mysql - 5,6 128 ГБ ОЗУ. используя Hibernate, который имеет постоянный пул соединений.
1 ответ
Сделайте следующее в my.cnf и перезапустите mysql
[mysqld]
innodb_lock_wait_timeout=10000
или же
SET GLOBAL innodb_lock_wait_timeout = 10000;
Вы также можете сделать это временным таймаутом для триггера, добавив ниже к своему триггеру:
SET innodb_lock_wait_timeout = 10000;