#Что означает ошибка
Lock wait timeout exceeded
Транзакция ждёт блокировку слишком долго. Найдите длительные транзакции, сократите их и проверьте индексы.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Долгая транзакция | В случае «MySQL: ERROR 1205 — Lock wait timeout exceeded» проверьте наличие причины «Долгая транзакция» по исходному действию и связанному сообщению; переходить к исправлению стоит после её подтверждения. | Завершите |
| Нет индекса | В случае «MySQL: ERROR 1205 — Lock wait timeout exceeded» проверьте наличие причины «Нет индекса» по исходному действию и связанному сообщению; переходить к исправлению стоит после её подтверждения. | Добавьте. Конкретное действие зависит от проверки причины «Нет индекса», описанной в пошаговой инструкции. |
| Забытый COMMIT | В случае «MySQL: ERROR 1205 — Lock wait timeout exceeded» проверьте наличие причины «Забытый COMMIT» по исходному действию и связанному сообщению; переходить к исправлению стоит после её подтверждения. | Закройте. Конкретное действие зависит от проверки причины «Забытый COMMIT», описанной в пошаговой инструкции. |
| Малый таймаутinnodb_lock_wait_timeout. | В случае «MySQL: ERROR 1205 — Lock wait timeout exceeded» проверьте наличие причины «Малый таймаут» по исходному действию и связанному сообщению; переходить к исправлению стоит после её подтверждения. | Настройте. Конкретное действие зависит от проверки причины «Малый таймаут», описанной в пошаговой инструкции. |
#Пошаговое решение
- Определите причинуВ SQL-консоли MySQL под учётной записью с правами диагностики выполните
SHOW FULL PROCESSLIST;и при доступности изучитеperformance_schema.data_lock_waitsвместе сdata_locks. Найдите блокирующую и ожидающую транзакцию, сохранив время и таблицу; ошибка 1205 означает ожидание блокировки дольше лимита. - Выполните подходящее исправлениеПроверьте код приложения: транзакция должна быть как можно короче и завершаться COMMIT/ROLLBACK при всех ветвях ошибки. Для UPDATE/DELETE изучите план
EXPLAINи индексы условий, чтобы избежать блокирования лишних строк. Сначала исправляйте запрос на стенде, не увеличиваяinnodb_lock_wait_timeoutавтоматически. - Проверьте другие возможные причиныЕсли блокирующая транзакция связана с администрированием, импортом или миграцией, дождитесь её завершения либо согласуйте остановку с владельцем операции.
KILLзапроса может вызвать долгий откат и потерю незавершённой работы; до вмешательства узнайте владельца и последствия. Увеличение таймаута только откладывает проблему. - Убедитесь в результатеПовторите конфликтовавшую операцию при штатной и параллельной нагрузке и проверьте, что ожидающая транзакция теперь завершается. Сопоставьте задержку и количество 1205 в журнале; не выполняйте повторно операции списания/платежа, пока не известно, была ли предыдущая транзакция зафиксирована.
#Если проблема осталась
Если «MySQL: ERROR 1205 — Lock wait timeout exceeded» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.