Spec-Zone.ru › MySQL 8.4

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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/performance-schema-metadata-locks-table.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API