Spec-Zone .ru
спецификации, руководства, описания, API

14.2.3.9. Обнаружение мертвой блокировки и Откат

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

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

Когда InnoDB выполняет полный откат транзакции, все блокировки, установленные транзакцией, выпускаются. Однако, если только единственный SQL-оператор откатывается в результате ошибки, некоторые из блокировок, установленных оператором, могут быть сохранены. Это происходит потому что InnoDB блокировки строки хранилищ в формате так, что, который это не может знать позже, какая блокировка была установлена который оператор.

Если a SELECT вызывает сохраненную функцию в транзакции, и оператор в пределах функциональных сбоев, тот оператор откатывает. Кроме того, если ROLLBACK выполняется после этого вся транзакция откатывает.

Для методов, чтобы организовать операции базы данных, чтобы избежать мертвых блокировок, см. Раздел 14.2.3.10, "Как Справиться с Мертвыми блокировками".