17.15.2.2 Информация о блокировках и ожидании блокировок InnoDB
Когда транзакция обновляет строку в таблице или блокирует её с помощью SELECT FOR UPDATE, InnoDB создаёт список или очередь блокировок этой строки. Аналогично, InnoDB поддерживает список блокировок таблицы для блокировок на уровне таблицы. Если вторая транзакция хочет обновить строку или заблокировать таблицу, уже заблокированную предыдущей транзакцией в несовместимом режиме, InnoDB добавляет запрос блокировки строки в соответствующую очередь. Для того, чтобы транзакция получила блокировку, все несовместимые запросы блокировки, ранее добавленные в очередь блокировки для этой строки или таблицы, должны быть удалены (что происходит, когда транзакции, удерживающие или запрашивающие эти блокировки, либо завершаются, либо откатываются).
Транзакция может иметь любое количество запросов блокировки для разных строк или таблиц. В любой момент времени транзакция может запросить блокировку, удерживаемую другой транзакцией, в этом случае она заблокирована этой другой транзакцией. Запрашивающая транзакция должна ждать, пока транзакция, удерживающая блокирующую блокировку, завершится или откатится. Если транзакция не ждёт блокировку, она находится в состоянии RUNNING. Если транзакция ждёт блокировку, она находится в состоянии LOCK WAIT. (Значения состояния транзакции указываются в таблице INFORMATION_SCHEMA INNODB_TRX.)
Таблица Performance Schema data_locks содержит одну или несколько строк для каждой LOCK
WAIT транзакции, показывая любые запросы блокировок, которые препятствуют её продвижению. Эта таблица также содержит одну строку, описывающую каждую блокировку в очереди блокировок, ожидающих для данной строки или таблицы. Таблица Performance Schema data_lock_waits показывает, какие блокировки, уже удерживаемые транзакцией, являются блокирующими блокировками, запрошенными другими транзакциями.
© 2025 Oracle
Licensed under the GPLv2 License.