このページは機械翻訳したものです。
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_SCHEMAINNODB_TRXテーブルのTRX_IDカラムと結合します。 -
THREAD_IDロックを作成したセッションのスレッド ID。 スレッドの詳細を取得するには、このカラムをパフォーマンススキーマ
threadsテーブルのTHREAD_IDカラムと結合します。THREAD_IDをEVENT_IDとともに使用して、メモリー内にロックデータ構造が作成されたイベントを判別できます。 (このイベントは、データ構造を使用して複数のロックが格納されている場合、この特定のロックリクエストが発生する前に発生した可能性があります。) -
EVENT_IDロックの原因となったパフォーマンススキーマイベント。 (
THREAD_ID、EVENT_ID) 値のタプルは、他の「パフォーマンススキーマ」テーブルの親イベントを暗黙的に識別します:events_waits_テーブルの親待機イベントxxxevents_stages_テーブルの親ステージイベントxxxevents_statements_テーブルの親ステートメントイベントxxxevents_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 テーブルに対して許可されていません。