DATA_LOCK_WAITS
表DATA_LOCK_WAITSは、クラスター内のすべての TiKV ノードで進行中のロック待機情報を示します。これには、悲観的トランザクションのロック待機情報と、ブロックされている楽観的トランザクションの情報が含まれます。
USE information_schema;
DESC data_lock_waits;
+------------------------+---------------------+------+------+---------+-------+
| Field                  | Type                | Null | Key  | Default | Extra |
+------------------------+---------------------+------+------+---------+-------+
| KEY                    | text                | NO   |      | NULL    |       |
| KEY_INFO               | text                | YES  |      | NULL    |       |
| TRX_ID                 | bigint(21) unsigned | NO   |      | NULL    |       |
| CURRENT_HOLDING_TRX_ID | bigint(21) unsigned | NO   |      | NULL    |       |
| SQL_DIGEST             | varchar(64)         | YES  |      | NULL    |       |
| SQL_DIGEST_TEXT        | text                | YES  |      | NULL    |       |
+------------------------+---------------------+------+------+---------+-------+
DATA_LOCK_WAITSテーブルの各列フィールドの意味は次のとおりです。
KEY: ロックを待機している 16 進数形式のキー。KEY_INFO:KEYの詳細情報です。 KEY_INFOセクションを参照してください。TRX_ID: ロックを待機しているトランザクションの ID。この ID はトランザクションのstart_tsでもあります。CURRENT_HOLDING_TRX_ID: 現在ロックを保持しているトランザクションの ID。この ID はトランザクションのstart_tsでもあります。SQL_DIGEST: ロック待ちトランザクションで現在ブロックされている SQL 文のダイジェスト。SQL_DIGEST_TEXT: ロック待機トランザクションで現在ブロックされている正規化された SQL ステートメント (引数と形式のない SQL ステートメント)。SQL_DIGESTに相当します。
KEY_INFO
KEY_INFO列目はKEY列目の詳細情報を表示します。情報はJSON形式で表示されます。各フィールドの説明は次のとおりです。
"db_id": キーが属するスキーマの ID。"db_name": キーが属するスキーマの名前。"table_id": キーが属するテーブルの ID。"table_name": キーが属するテーブルの名前。"partition_id": キーが配置されているパーティションの ID。"partition_name": キーが存在するパーティションの名前。"handle_type": 行キー (つまり、データ行を格納するキー) のハンドル タイプ。可能な値は次のとおりです。"int": ハンドルのタイプは int です。これは、ハンドルが行 ID であることを意味します。"common": ハンドルの型は int64 ではありません。この型は、クラスター化インデックスが有効になっている場合、非 int 主キーに表示されます。"unknown": ハンドル タイプは現在サポートされていません。
"handle_value": ハンドル値。"index_id": インデックスキー(インデックスを格納するキー)が属するインデックスID。"index_name": インデックスキーが属するインデックスの名前。"index_values": インデックス キーのインデックス値。
上記のフィールドでは、フィールドの情報が適用できない場合、または現在利用できない場合、そのフィールドはクエリ結果で省略されます。たとえば、行キー情報にはindex_id 、 index_name 、およびindex_valuesは含まれません。インデックス キーにはhandle_typeとhandle_valueは含まれません。パーティション化されていないテーブルにはpartition_idとpartition_nameは表示されません。削除されたテーブルのキー情報は、 table_nameなどのスキーマ情報db_name取得できず、テーブルがパーティションテーブルでindex_name db_idどうかを区別できません。
ノート:
パーティショニングが有効になっているテーブルからキーが取得され、クエリ中に何らかの理由 (キーが属するテーブルが削除されたなど) によりキーが属するスキーマの情報をクエリできない場合、IDキーが属するパーティションの名前が
table_idフィールドに表示される場合があります。これは、TiDB が複数の独立したテーブルのキーをエンコードするのと同じ方法で、異なるパーティションのキーをエンコードするためです。したがって、スキーマ情報が欠落している場合、TiDB はキーがパーティション化されていないテーブルに属しているのか、テーブルの 1 つのパーティションに属しているのかを確認できません。
例
select * from information_schema.data_lock_waits\G
*************************** 1. row ***************************
                   KEY: 7480000000000000355F728000000000000001
              KEY_INFO: {"db_id":1,"db_name":"test","table_id":53,"table_name":"t","handle_type":"int","handle_value":"1"}
                TRX_ID: 426790594290122753
CURRENT_HOLDING_TRX_ID: 426790590082449409
            SQL_DIGEST: 38b03afa5debbdf0326a014dbe5012a62c51957f1982b3093e748460f8b00821
       SQL_DIGEST_TEXT: update `t` set `v` = `v` + ? where `id` = ?
1 row in set (0.01 sec)
上記のクエリ結果は、ID 426790594290122753のトランザクションが、ダイジェスト"38b03afa5debbdf0326a014dbe5012a62c51957f1982b3093e748460f8b00821"を持ち、 update `t` set `v` = `v` + ? where `id` = ?の形式であるステートメントを実行するときに、キー"7480000000000000355F728000000000000001"の悲観的ロックを取得しようとしていますが、このキーのロックはトランザクションによって保持されていることを示しています。 ID 426790590082449409の。