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показывает значения ключей выбранного уникального индекса или уникальный внутренний идентификатор строки, в соответствии с правилами использования кластеризованного индекса (см. Раздел 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.