Spec-Zone .ru
спецификации, руководства, описания, API
|
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, "Как Справиться с Мертвыми блокировками".