MySQL 8.0 リファレンスマニュアル


27.12.13.1 data_locks テーブル

data_locks テーブルには、保持およびリクエストされたデータロックが表示されます。 どのロック要求がどの保持ロックによってブロックされるかについては、セクション27.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

ほとんどのパフォーマンススキーマデータ収集とは異なり、データロック情報を収集するか、データロックテーブルのサイズを制御するためのシステム変数を制御するためのインストゥルメントはありません。 パフォーマンススキーマは、サーバーですでに使用可能な情報を収集するため、この情報を生成したり、その収集を制御するパラメータを必要とするメモリーまたは CPU のオーバーヘッドはありません。

data_locks テーブルを使用すると、負荷が高いときに発生するパフォーマンスの問題の診断に役立ちます。 InnoDB については、セクション15.15.2「InnoDB INFORMATION_SCHEMA トランザクションおよびロック情報」 でこのトピックの説明を参照してください。

data_locks テーブルには、次のカラムがあります:

  • ENGINE

    ロックを保持または要求したストレージエンジン。

  • ENGINE_LOCK_ID

    ストレージエンジンによって保持または要求されたロックの ID。 (ENGINE_LOCK_IDENGINE) 値のタプルは一意です。

    「ロック ID」形式は内部形式であり、いつでも変更される可能性があります。 アプリケーションは、特定の形式のロック ID に依存しないでください。

  • ENGINE_TRANSACTION_ID

    ロックを要求したトランザクションのストレージエンジン内部 ID。 これはロックの所有者とみなすことができますが、ロックはまだ保留中であり、実際にはまだ付与されていない可能性があります (LOCK_STATUS='WAITING')。

    トランザクションがまだ書込み操作を実行していない場合 (読取り専用とみなされます)、カラムにはユーザーが解釈しようとしない内部データが含まれます。 それ以外の場合、カラムはトランザクション ID です。

    InnoDB の場合、トランザクションの詳細を取得するには、このカラムを INFORMATION_SCHEMA INNODB_TRX テーブルの TRX_ID カラムと結合します。

  • THREAD_ID

    ロックを作成したセッションのスレッド ID。 スレッドの詳細を取得するには、このカラムをパフォーマンススキーマ threads テーブルの THREAD_ID カラムと結合します。

    THREAD_IDEVENT_ID とともに使用して、メモリー内にロックデータ構造が作成されたイベントを判別できます。 (このイベントは、データ構造を使用して複数のロックが格納されている場合、この特定のロックリクエストが発生する前に発生した可能性があります。)

  • EVENT_ID

    ロックの原因となったパフォーマンススキーマイベント。 (THREAD_IDEVENT_ID) 値のタプルは、他の「パフォーマンススキーマ」テーブルの親イベントを暗黙的に識別します:

    • events_waits_xxx テーブルの親待機イベント

    • events_stages_xxx テーブルの親ステージイベント

    • events_statements_xxx テーブルの親ステートメントイベント

    • events_transactions_current テーブルの親トランザクションイベント

    親イベントの詳細を取得するには、THREAD_ID カラムと EVENT_ID カラムを適切な親イベントテーブルの同名のカラムと結合します。 セクション27.19.2「親イベント情報の取得」を参照してください。

  • OBJECT_SCHEMA

    ロックされたテーブルを含むスキーマ。

  • OBJECT_NAME

    ロックされたテーブルの名前。

  • PARTITION_NAME

    ロックされたパーティションの名前 (存在する場合)。それ以外の場合は NULL

  • SUBPARTITION_NAME

    ロックされたサブパーティションの名前 (存在する場合)。それ以外の場合は NULL

  • INDEX_NAME

    ロックされたインデックスの名前 (存在する場合)。それ以外の場合は NULL

    実際には、InnoDB は常にインデックス (GEN_CLUST_INDEX) を作成するため、INDEX_NAMEInnoDB テーブルに対して NULL 以外です。

  • 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 およびギャップロックの詳細は、セクション15.7.1「InnoDB ロック」 を参照してください。

  • LOCK_STATUS

    ロックリクエストのステータス。

    この値はストレージエンジンに依存します。 InnoDB の場合、許可される値は、GRANTED (ロックが保持されている) および WAITING (ロックが待機されている) です。

  • LOCK_DATA

    ロックに関連付けられているデータ (ある場合)。 この値はストレージエンジンに依存します。 InnoDB の場合、LOCK_TYPERECORD の場合は値が表示され、それ以外の場合は NULL 値が表示されます。 ロックされたレコードの主キー値は、主キーインデックスに設定されたロックに対して表示されます。 ロックされたレコードのセカンダリインデックス値が表示され、セカンダリインデックスに配置されたロックに主キー値が追加されます。 主キーがない場合、LOCK_DATA では、InnoDB クラスタインデックスの使用を制御するルールに従って、選択した一意インデックスのキー値または一意の InnoDB 内部行 ID 番号のいずれかが表示されます (セクション15.6.2.1「クラスタインデックスとセカンダリインデックス」 を参照)。 LOCK_DATA は、supremum 擬似レコードで取得されたロックについて「supremum 擬似レコード」を報告します。 ロックされたレコードを含むページが、ロックの保持中にディスクに書き込まれたためにバッファプールにない場合、InnoDB はディスクからページをフェッチしません。 かわりに、LOCK_DATANULL をレポートします。

data_locks テーブルには次のインデックスがあります:

  • 主キー (ENGINE_LOCK_IDENGINE)

  • (ENGINE_TRANSACTION_IDENGINE) のインデックス

  • (THREAD_IDEVENT_ID) のインデックス

  • (OBJECT_SCHEMA, OBJECT_NAME, PARTITION_NAME, SUBPARTITION_NAME) のインデックス

TRUNCATE TABLE は、data_locks テーブルに対して許可されていません。


関連キーワード:  テーブル, ロック, パフォーマンス, スキーマ, LOCK, InnoDB, events, NAME, インデックス, イベント