地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

performance_schema.data_locksとperformance_schema.data_lock_waits

今更すぎるがMySQL 8.0から入ったperformance_schema.data_locks・performance_schema.data_lock_waitsあたりを学んでメモしていく。

performance_schema.data_locks

dev.mysql.com

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    |       |
+----------------------------------+-----------------+------+-----+---------+-------+

参考