29.12.13.3 Таблица metadata_locks
MySQL использует блокировки метаданных для управления одновременным доступом к объектам базы данных и обеспечения согласованности данных; см. Раздел 10.11.4, «Блокировка метаданных». Блокировка метаданных применяется не только к таблицам, но также к схемам, хранимым программам (процедурам, функциям, триггерам, запланированным событиям), табличным пространствам, блокировкам пользователей, полученным с помощью функции GET_LOCK() (см. Раздел 14.14, «Функции блокировки»), и блокировкам, полученным с помощью службы блокировки, описанной в Разделе 7.6.9.1, «Служба блокировки».
Схема Performance Schema предоставляет информацию о блокировках метаданных через таблицу metadata_locks:
Блокировки, которые были предоставлены (показывает, какие сеансы владеют текущими блокировками метаданных).
Блокировки, которые были запрошены, но еще не предоставлены (показывает, какие сеансы ожидают каких блокировок метаданных).
Запросы блокировок, которые были убиты детектором тупиковых ситуаций.
Запросы блокировок, которые истекли и ожидают, пока запрос на блокировку запрашивающего сеанса не будет удален.
Эта информация позволяет понять зависимости блокировок метаданных между сеансами. Вы можете видеть не только, какую блокировку ожидает сеанс, но и какой сеанс в данный момент держит эту блокировку.
Таблица metadata_locks является только для чтения и не может быть обновлена. По умолчанию она автоматически масштабируется; для настройки размера таблицы установите системную переменную performance_schema_max_metadata_locks при запуске сервера.
Измерение блокировок метаданных использует инструмент wait/lock/metadata/sql/mdl, который включен по умолчанию.
Для управления состоянием измерения блокировок метаданных при запуске сервера используйте строки вроде этих в вашем файле my.cnf:
-
Включить:
[mysqld] performance-schema-instrument='wait/lock/metadata/sql/mdl=ON'
-
Отключить:
[mysqld] performance-schema-instrument='wait/lock/metadata/sql/mdl=OFF'
Для управления состоянием измерения блокировок метаданных во время выполнения, обновите таблицу setup_instruments:
-
Включить:
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME = 'wait/lock/metadata/sql/mdl';
-
Отключить:
UPDATE performance_schema.setup_instruments SET ENABLED = 'NO', TIMED = 'NO' WHERE NAME = 'wait/lock/metadata/sql/mdl';
Схема Performance Schema поддерживает содержимое таблицы metadata_locks следующим образом, используя столбец LOCK_STATUS для указания состояния каждой блокировки:
Когда запрос на блокировку метаданных и получение немедленно, вставляется строка со статусом
GRANTED.Когда запрос на блокировку метаданных и не получен немедленно, вставляется строка со статусом
PENDING.Когда ранее запрошенная блокировка метаданных предоставлена, состояние строки обновляется до
GRANTED.Когда блокировка метаданных освобождается, ее строка удаляется.
Когда запрос на блокировку в ожидании отменяется детектором тупиковых ситуаций для устранения тупиковой ситуации, состояние строки обновляется с
PENDINGнаVICTIM.Когда запрос на блокировку в ожидании истекает, состояние строки обновляется с
PENDINGнаTIMEOUT.Когда предоставленная блокировка или запрос на блокировку в ожидании убивается, состояние строки обновляется с
GRANTEDилиPENDINGнаKILLED.Значения статусов
VICTIM,TIMEOUTиKILLEDкраткие и означают, что строка блокировки будет удалена.Значения статусов
PRE_ACQUIRE_NOTIFYиPOST_RELEASE_NOTIFYкраткие и означают, что подподсистема блокировки метаданных уведомляет заинтересованные движки хранения во время вхождения в операции получения блокировки или выхода из операций освобождения блокировок.
Таблица metadata_locks имеет следующие столбцы:
-
OBJECT_TYPEТип блокировки, используемой в подсистеме блокировки метаданных. Значение является одним из
GLOBAL,SCHEMA,TABLE,FUNCTION,PROCEDURE,TRIGGER(в настоящее время не используется),EVENT,COMMIT,USER LEVEL LOCK,TABLESPACE,BACKUP LOCKилиLOCKING SERVICE.Значение
USER LEVEL LOCKуказывает на блокировку, полученную с помощьюGET_LOCK(). ЗначениеLOCKING SERVICEуказывает на блокировку, полученную с помощью службы блокировки, описанной в Разделе 7.6.9.1, «Служба блокировки». -
OBJECT_SCHEMAСхема, содержащая объект.
-
OBJECT_NAMEИмя инструментированного объекта.
-
OBJECT_INSTANCE_BEGINАдрес в памяти инструментированного объекта.
-
LOCK_TYPEТип блокировки из подсистемы блокировки метаданных. Значение является одним из
INTENTION_EXCLUSIVE,SHARED,SHARED_HIGH_PRIO,SHARED_READ,SHARED_WRITE,SHARED_UPGRADABLE,SHARED_NO_WRITE,SHARED_NO_READ_WRITEилиEXCLUSIVE. -
LOCK_DURATIONДлительность блокировки из подсистемы блокировки метаданных. Значение является одним из
STATEMENT,TRANSACTIONилиEXPLICIT. ЗначенияSTATEMENTиTRANSACTIONобозначают блокировки, которые неявно освобождаются в конце оператора или транзакции соответственно. ЗначениеEXPLICITобозначает блокировки, которые сохраняются после оператора или транзакции и освобождаются явным действием, например, глобальные блокировки, полученные с помощьюFLUSH TABLES WITH READ LOCK. -
LOCK_STATUSСтатус блокировки из подсистемы блокировки метаданных. Значение является одним из
PENDING,GRANTED,VICTIM,TIMEOUT,KILLED,PRE_ACQUIRE_NOTIFYилиPOST_RELEASE_NOTIFY. Схема Performance Schema присваивает эти значения, как описано ранее. -
SOURCEИмя файла исходного кода, содержащего инструментированный код, который создал событие, и номер строки в файле, в котором происходит инструментирование. Это позволяет проверить исходный код, чтобы точно определить, какой код задействован.
-
OWNER_THREAD_IDПоток, запрашивающий блокировку метаданных.
-
OWNER_EVENT_IDСобытие, запрашивающее блокировку метаданных.
Таблица metadata_locks имеет следующие индексы:
Первичный ключ по (
OBJECT_INSTANCE_BEGIN)Индекс по (
OBJECT_TYPE,OBJECT_SCHEMA,OBJECT_NAME)Индекс по (
OWNER_THREAD_ID,OWNER_EVENT_ID)
TRUNCATE TABLE не разрешено для таблицы metadata_locks.
© 2025 Oracle
Licensed under the GPLv2 License.