Spec-Zone.ru › MySQL 9.2

17.7.5.2 Обнаружение тупиковых ситуаций

При включенном режиме (по умолчанию) InnoDB автоматически обнаруживает транзакционные тупиковые ситуации и откатывает одну или несколько транзакций, чтобы разорвать тупик. InnoDB пытается выбрать для отката небольшие транзакции, где размер транзакции определяется количеством строк, вставленных, обновленных или удаленных.

InnoDB учитывает блокировки таблиц, если innodb_table_locks = 1 (по умолчанию) и autocommit = 0, а слой MySQL выше него осведомлён о блокировках на уровне строк. В противном случае, InnoDB не может обнаружить тупиковые ситуации, где участвует блокировка таблицы, установленная оператором MySQL LOCK TABLES или блокировка, установленная другим движком хранения, кроме InnoDB. Решите эти ситуации, установив значение системной переменной innodb_lock_wait_timeout.

Если раздел LATEST DETECTED DEADLOCK в выводе монитора InnoDB содержит сообщение СЛИШКОМ ГЛУБОКИЙ ИЛИ ДЛИННЫЙ ПОИСК В ЖДЁТ-ЗАПИСИ ТАБЛИЦЫ БЛОКИРОВОК, МЫ ОТКАТИМ СЛЕДУЮЩУЮ ТРАНЗАКЦИЮ, это означает, что количество транзакций в очереди ожидания достигло лимита в 200. Очередь ожидания, превышающая 200 транзакций, обрабатывается как тупиковая ситуация, и транзакция, пытающаяся проверить очередь ожидания, откатывается. Такая же ошибка может возникнуть, если потоку блокировки нужно просмотреть более 1 000 000 блокировок, принадлежащих транзакциям в очереди ожидания.

Для методов организации операций с базой данных, чтобы избежать тупиковых ситуаций, см. Раздел 17.7.5, “Тупиковые ситуации в InnoDB”.

Отключение обнаружения тупиковых ситуаций

В системах с высокой конкурентностью обнаружение тупиковых ситуаций может замедлить работу, когда много потоков ожидают одного и того же замка. В некоторых случаях может быть эффективнее отключить обнаружение тупиковых ситуаций и полагаться на настройку innodb_lock_wait_timeout для отката транзакции при возникновении тупиковой ситуации. Обнаружение тупиковых ситуаций можно отключить с помощью переменной innodb_deadlock_detect.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/innodb-deadlock-detection.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API