今更すぎるがMySQL 8.0から入ったperformance_schema.data_locks・performance_schema.data_lock_waitsあたりを学んでメモしていく。
performance_schema.data_locks
performance_schema.data_locks は、MySQLデータベースのパフォーマンス監視のために提供されているテーブルの一つです。このテーブルは、MySQLデータベース内のデータロックに関する情報を収集し、監視するために使用することができます。加えてこれらのデータロックの詳細情報を提供し、データベースのパフォーマンスのトラブルシューティングや最適化に役立てたりもできます。
具体的な定義は以下のようになっています。
+-----------------------+-----------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+-----------------+------+-----+---------+-------+ | ENGINE | varchar(32) | NO | PRI | NULL | | | ENGINE_LOCK_ID | varchar(128) | NO | PRI | NULL | | | ENGINE_TRANSACTION_ID | bigint unsigned | YES | MUL | NULL | | | THREAD_ID | bigint unsigned | YES | MUL | NULL | | | EVENT_ID | bigint unsigned | YES | | NULL | | | OBJECT_SCHEMA | varchar(64) | YES | MUL | NULL | | | OBJECT_NAME | varchar(64) | YES | | NULL | | | PARTITION_NAME | varchar(64) | YES | | NULL | | | SUBPARTITION_NAME | varchar(64) | YES | | NULL | | | INDEX_NAME | varchar(64) | YES | | NULL | | | OBJECT_INSTANCE_BEGIN | bigint unsigned | NO | | NULL | | | LOCK_TYPE | varchar(32) | NO | | NULL | | | LOCK_MODE | varchar(32) | NO | | NULL | | | LOCK_STATUS | varchar(32) | NO | | NULL | | | LOCK_DATA | varchar(8192) | YES | | NULL | | +-----------------------+-----------------+------+-----+---------+-------+
performance_schema.data_lock_waits
上述したテーブル同様の機能に加えてデータベース内でデータロックを待機しているトランザクションやクエリに関する情報を提供をしています。データベース内でデータロックが既に他のトランザクションによって取得されていて、別のトランザクションがそのロックを待機している状況を示すのでどのクエリとどのクリで競合が起きてるのかまでを確認したりすることができます。
+----------------------------------+-----------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------------------------+-----------------+------+-----+---------+-------+ | ENGINE | varchar(32) | NO | | NULL | | | REQUESTING_ENGINE_LOCK_ID | varchar(128) | NO | MUL | NULL | | | REQUESTING_ENGINE_TRANSACTION_ID | bigint unsigned | YES | MUL | NULL | | | REQUESTING_THREAD_ID | bigint unsigned | YES | MUL | NULL | | | REQUESTING_EVENT_ID | bigint unsigned | YES | | NULL | | | REQUESTING_OBJECT_INSTANCE_BEGIN | bigint unsigned | NO | | NULL | | | BLOCKING_ENGINE_LOCK_ID | varchar(128) | NO | MUL | NULL | | | BLOCKING_ENGINE_TRANSACTION_ID | bigint unsigned | YES | MUL | NULL | | | BLOCKING_THREAD_ID | bigint unsigned | YES | MUL | NULL | | | BLOCKING_EVENT_ID | bigint unsigned | YES | | NULL | | | BLOCKING_OBJECT_INSTANCE_BEGIN | bigint unsigned | NO | | NULL | | +----------------------------------+-----------------+------+-----+---------+-------+