Spec-Zone.ru › MySQL 8.4

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

Spec-Zone.ru

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