Spec-Zone.ru › MySQL 9.2

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_SCHEMA INNODB_TRX.

  • THREAD_ID

    Идентификатор потока сессии, создавшей блокировку. Чтобы получить подробную информацию о потоке, присоедините этот столбец к столбцу THREAD_ID таблицы Performance Schema threads.

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

Spec-Zone.ru

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