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_ID
、ENGINE
) 値のタプルは一意です。「ロック ID」形式は内部形式であり、いつでも変更される可能性があります。 アプリケーションは、特定の形式のロック ID に依存しないでください。
-
ENGINE_TRANSACTION_ID
ロックを要求したトランザクションのストレージエンジン内部 ID。 これはロックの所有者とみなすことができますが、ロックはまだ保留中であり、実際にはまだ付与されていない可能性があります (
LOCK_STATUS='WAITING'
)。トランザクションがまだ書込み操作を実行していない場合 (読取り専用とみなされます)、カラムにはユーザーが解釈しようとしない内部データが含まれます。 それ以外の場合、カラムはトランザクション ID です。
InnoDB
の場合、トランザクションの詳細を取得するには、このカラムをINFORMATION_SCHEMA
INNODB_TRX
テーブルのTRX_ID
カラムと結合します。 -
THREAD_ID
ロックを作成したセッションのスレッド ID。 スレッドの詳細を取得するには、このカラムをパフォーマンススキーマ
threads
テーブルのTHREAD_ID
カラムと結合します。THREAD_ID
をEVENT_ID
とともに使用して、メモリー内にロックデータ構造が作成されたイベントを判別できます。 (このイベントは、データ構造を使用して複数のロックが格納されている場合、この特定のロックリクエストが発生する前に発生した可能性があります。) -
EVENT_ID
ロックの原因となったパフォーマンススキーマイベント。 (
THREAD_ID
、EVENT_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_NAME
はInnoDB
テーブルに対して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_TYPE
がRECORD
の場合は値が表示され、それ以外の場合はNULL
値が表示されます。 ロックされたレコードの主キー値は、主キーインデックスに設定されたロックに対して表示されます。 ロックされたレコードのセカンダリインデックス値が表示され、セカンダリインデックスに配置されたロックに主キー値が追加されます。 主キーがない場合、LOCK_DATA
では、InnoDB
クラスタインデックスの使用を制御するルールに従って、選択した一意インデックスのキー値または一意のInnoDB
内部行 ID 番号のいずれかが表示されます (セクション15.6.2.1「クラスタインデックスとセカンダリインデックス」 を参照)。LOCK_DATA
は、supremum 擬似レコードで取得されたロックについて「「supremum 擬似レコード」」を報告します。 ロックされたレコードを含むページが、ロックの保持中にディスクに書き込まれたためにバッファプールにない場合、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
テーブルに対して許可されていません。