29.12.13.1 Таблица data_locks
Таблица data_locks отображает задерживаемые и запрашиваемые блокировки данных. Для информации о том, какие запросы блокировок заблокированы какими задержанными блокировками, см. Раздел 29.12.13.2, «Таблица data_lock_waits».
Пример информации о блокировке данных:
mysql> SELECT * FROM performance_schema.data_locks\G
*************************** 1. row ***************************
ENGINE: INNODB
ENGINE_LOCK_ID: 139664434886512:1059:139664350547912
ENGINE_TRANSACTION_ID: 2569
THREAD_ID: 46
EVENT_ID: 12
OBJECT_SCHEMA: test
OBJECT_NAME: t1
PARTITION_NAME: NULL
SUBPARTITION_NAME: NULL
INDEX_NAME: NULL
OBJECT_INSTANCE_BEGIN: 139664350547912
LOCK_TYPE: TABLE
LOCK_MODE: IX
LOCK_STATUS: GRANTED
LOCK_DATA: NULL
*************************** 2. row ***************************
ENGINE: INNODB
ENGINE_LOCK_ID: 139664434886512:2:4:1:139664350544872
ENGINE_TRANSACTION_ID: 2569
THREAD_ID: 46
EVENT_ID: 12
OBJECT_SCHEMA: test
OBJECT_NAME: t1
PARTITION_NAME: NULL
SUBPARTITION_NAME: NULL
INDEX_NAME: GEN_CLUST_INDEX
OBJECT_INSTANCE_BEGIN: 139664350544872
LOCK_TYPE: RECORD
LOCK_MODE: X
LOCK_STATUS: GRANTED
LOCK_DATA: supremum pseudo-record
В отличие от большинства данных сбора Performance Schema, нет инструментов для управления тем, собирается ли информация о блокировке данных, или системных переменных для управления размерами таблиц блокировки данных. Performance Schema собирает информацию, которая уже доступна в сервере, поэтому нет дополнительной нагрузки на память или процессор для генерации этой информации или необходимости параметров, управляющих ее сбором.
Используйте таблицу data_locks, чтобы помочь в диагностике проблем производительности, возникающих во время высокой одновременной нагрузки. Для InnoDB см. обсуждение этой темы в Разделе 17.15.2, «Информация об операциях и блокировках InnoDB INFORMATION_SCHEMA».
Таблица data_locks содержит следующие столбцы:
-
ENGINEСистемный движок, который держит или запросил блокировку.
-
ENGINE_LOCK_IDИдентификатор блокировки, удерживаемой или запрашиваемой системным движком. Кортежи значений (
ENGINE_LOCK_ID,ENGINE) уникальны.Форматы идентификаторов блокировок внутренние и могут быть изменены в любое время. Приложения не должны полагаться на определенный формат идентификаторов блокировок.
-
ENGINE_TRANSACTION_IDВнутренний идентификатор системного движка транзакции, которая запросила блокировку. Это можно рассматривать как владельца блокировки, хотя блокировка может быть еще ожидающей, фактически не предоставленной пока (
LOCK_STATUS='WAITING').Если транзакция еще не выполнила никакой операции записи (еще считается только чтением), в столбце содержатся внутренние данные, которые пользователям не следует пытаться интерпретировать. В противном случае в столбце содержится идентификатор транзакции.
Для
InnoDB, чтобы получить детали о транзакции, присоедините этот столбец к столбцуTRX_IDтаблицыINFORMATION_SCHEMAINNODB_TRX. -
THREAD_IDИдентификатор потока сессии, создавшей блокировку. Чтобы получить подробную информацию о потоке, присоедините этот столбец к столбцу
THREAD_IDтаблицы Performance Schemathreads.THREAD_IDможно использовать совместно сEVENT_ID, чтобы определить событие, в ходе которого структура данных блокировки была создана в памяти. (Это событие могло произойти до запроса конкретной блокировки, если структура данных используется для хранения нескольких блокировок.) -
EVENT_IDСобытие Performance Schema, которое вызвало блокировку. Кортежи значений (
THREAD_ID,EVENT_ID) неявно идентифицируют родительское событие в других таблицах Performance Schema:Родительское событие ожидания в таблицах
events_waits_xxxРодительское событие стадии в таблицах
events_stages_xxxРодительское событие оператора в таблицах
events_statements_xxxРодительское событие транзакции в таблице
events_transactions_current
Чтобы получить подробности о родительском событии, присоедините столбцы
THREAD_IDиEVENT_IDк столбцам с аналогичным именем в соответствующей таблице родительского события. См. Раздел 29.19.2, «Получение информации о родительских событиях». -
OBJECT_SCHEMAСхема, содержащая заблокированную таблицу.
-
OBJECT_NAMEИмя заблокированной таблицы.
-
PARTITION_NAMEИмя заблокированного раздела, если есть;
NULLв противном случае. -
SUBPARTITION_NAMEИмя заблокированного подраздела, если есть;
NULLв противном случае. -
INDEX_NAMEИмя заблокированного индекса, если есть;
NULLв противном случае.На практике,
InnoDBвсегда создает индекс (GEN_CLUST_INDEX), поэтомуINDEX_NAMEне являетсяNULLдля таблицInnoDB. -
OBJECT_INSTANCE_BEGINАдрес блокировки в памяти.
-
LOCK_TYPEТип блокировки.
Значение зависит от системного движка. Для
InnoDBдопустимые значения —RECORDдля блокировки на уровне строки,TABLEдля блокировки на уровне таблицы. -
LOCK_MODEСпособ запроса блокировки.
Значение зависит от системного движка. Для
InnoDBдопустимые значения —S[,GAP],X[,GAP],IS[,GAP],IX[,GAP],AUTO_INCиUNKNOWN. Режимы блокировки, отличные отAUTO_INCиUNKNOWN, указывают на блокировки зазоров, если они присутствуют. Для получения информации оS,X,IS,IXи блокировках зазоров, обратитесь к Разделу 17.7.1, «Блокировки InnoDB». -
LOCK_STATUSСтатус запроса блокировки.
Значение зависит от системного движка. Для
InnoDBдопустимые значения —GRANTED(блокировка удерживается) иWAITING(блокировка ожидает). -
LOCK_DATAДанные, связанные с блокировкой, если таковые имеются. Значение зависит от системного движка. Для
InnoDB, значение отображается, еслиLOCK_TYPEявляетсяRECORD, в противном случае значение —NULL. Значения первичного ключа заблокированной записи отображаются для блокировки, наложенной на индекс первичного ключа. Значения вторичных индексов заблокированной записи отображаются со значениями первичного ключа, добавленными для блокировки, наложенной на вторичный индекс. Если первичного ключа нет,LOCK_DATAотображает либо значения ключей выбранного уникального индекса, либо уникальный внутренний идентификатор строки, согласно правилам использования кластеризованного индексаInnoDB(см. Раздел 17.6.2.1, «Кластеризованные и вторичные индексы»).LOCK_DATAсообщает “супремум псевдозапись” для блокировки, взятой на псевдозаписи супремума. Если страница, содержащая заблокированную запись, не находится в кэше страниц, так как была записана на диск, в то время как блокировка удерживалась,InnoDBне извлекает страницу с диска. Вместо этого,LOCK_DATAсообщаетNULL.
Таблица data_locks содержит следующие индексы:
Первичный ключ по (
ENGINE_LOCK_ID,ENGINE)Индекс по (
ENGINE_TRANSACTION_ID,ENGINE)Индекс по (
THREAD_ID,EVENT_ID)Индекс по (
OBJECT_SCHEMA,OBJECT_NAME,PARTITION_NAME,SUBPARTITION_NAME)
TRUNCATE TABLE запрещена для таблицы data_locks.
© 2025 Oracle
Licensed under the GPLv2 License.