MariaDB Performance Schema events_waits_history_long テーブル:詳細解説とサンプルコード
テーブル構造
events_waits_history_long テーブルは次の列で構成されています。
- FLAGS: イベントに関するフラグ
- COUNT_ENDS: このイベントが終了した回数
- COUNT_STARTS: このイベントが開始された回数
- WAIT_MAX_TIME: このイベントの最大待機時間(ナノ秒単位)
- WAIT_AVG_TIME: このイベントの平均待機時間(ナノ秒単位)
- SQL_TEXT: イベントが待機している SQL ステートメント(該当する場合)
- STACK_FRAME: イベントが発生したときのスタックフレーム
- WAIT_ENDED: イベントが終了した時刻
- WAIT_STARTED: イベントが開始された時刻
- SLEEP_TIME: スレッドがスリープ状態にあった時間(ナノ秒単位)
- TIMER_WAIT: イベントが開始されてから経過した時間(ナノ秒単位)
- OBJECT_INSTANCE_NAME: 待機イベントが発生したオブジェクトの名前
- OBJECT_TYPE: 待機イベントが発生したオブジェクトの種類。たとえば、TABLE、INDEX、MUTEX など
- SCHEMA_NAME: 待機イベントが発生したスキーマ名
- EVENT_NAME: 待機イベントの名前
- EVENT_ID: スレッドの現在のイベント。THREAD_ID とともに、行を一意に識別します。
- THREAD_ID: イベントに関連付けられたスレッド ID
利点
events_waits_history_long テーブルを使用すると、次のような利点が得られます。
- アプリケーションのパフォーマンスを監視する: events_waits_history_long テーブルを使用して、アプリケーションのパフォーマンスを監視することができます。これにより、パフォーマンスの問題が発生する前に特定し、問題を解決することができます。
- データベースのパフォーマンスを向上させる: パフォーマンスのボトルネックを特定したら、そのボトルネックを解決するための対策を講じることができます。たとえば、ロックやセマフォの使用を減らすようにアプリケーションをコード変更したり、インデックスを追加したりすることができます。
使用例
events_waits_history_long テーブルは、次のようなさまざまな状況で使用できます。
- データベースのパフォーマンスを監視している場合: データベースのパフォーマンスを監視している場合は、events_waits_history_long テーブルを使用して、パフォーマンスの問題が発生する前に特定することができます。
- データベースのパフォーマンスをチューニングしている場合: データベースのパフォーマンスを向上させようとしている場合は、events_waits_history_long テーブルを使用して、パフォーマンスのボトルネックを特定し、そのボトルネックを解決することができます。
- アプリケーションのパフォーマンスを調査している場合: アプリケーションが応答速度が遅い場合、または予期しない動作が発生している場合は、events_waits_history_long テーブルを使用して、パフォーマンスのボトルネックを特定することができます。
クエリ例
次のクエリは、events_waits_history_long テーブルを使用して、特定のスレッド ID に関連付けられた待機イベントを表示します。
SELECT * FROM performance_schema.events_waits_history_long
WHERE THREAD_ID = 12345;
次のクエリは、events_waits_history_long テーブルを使用して、特定のイベント名に関連付けられた待機イベントを表示します。
SELECT * FROM performance_schema.events_waits_history_long
WHERE EVENT_NAME = 'Galera_recovery_wait';
- events_waits_history_long テーブルは、常に最新の情報を反映しているわけではありません。イベントが終了してから、テーブルに記録されるまでに時間がかかる場合があります。
- events_waits_history_long テーブルは、大量のデータを含んでいる可能性があります。このテーブルに頻繁にアクセスする場合は、パフォーマンスに影響を与える可能性があることに注意してください。
特定のスレッド ID に関連付けられた待機イベントを表示する
SELECT * FROM performance_schema.events_waits_history_long
WHERE THREAD_ID = 12345;
特定のイベント名に関連付けられた待機イベントを表示する
SELECT * FROM performance_schema.events_waits_history_long
WHERE EVENT_NAME = 'Galera_recovery_wait';
このクエリは、EVENT_NAME
'Galera_recovery_wait' に関連付けられたすべての待機イベントを events_waits_history_long
テーブルから選択します。
待機イベントの平均待機時間をイベント名ごとに表示する
SELECT EVENT_NAME, AVG(TIMER_WAIT) AS AVG_WAIT_TIME
FROM performance_schema.events_waits_history_long
GROUP BY EVENT_NAME;
このクエリは、events_waits_history_long
テーブルからすべての待機イベントを選択し、イベント名ごとに平均待機時間をグループ化して表示します。
待機イベントの最大待機時間をイベント名ごとに表示する
SELECT EVENT_NAME, MAX(TIMER_WAIT) AS MAX_WAIT_TIME
FROM performance_schema.events_waits_history_long
GROUP BY EVENT_NAME;
待機イベントの開始回数をイベント名ごとに表示する
SELECT EVENT_NAME, COUNT(DISTINCT WAIT_STARTED) AS COUNT_STARTS
FROM performance_schema.events_waits_history_long
GROUP BY EVENT_NAME;
このクエリは、events_waits_history_long
テーブルからすべての待機イベントを選択し、イベント名ごとに待機イベントの開始回数をグループ化して表示します。
SELECT EVENT_NAME, COUNT(DISTINCT WAIT_ENDED) AS COUNT_ENDS
FROM performance_schema.events_waits_history_long
GROUP BY EVENT_NAME;
説明
これらのクエリは、events_waits_history_long
テーブルを使用して、さまざまな情報を取得する方法を示しています。これらのクエリを独自的需求に合わせてカスタマイズして、必要な情報を取得することができます。
events_waits_history_long
テーブルは、常に最新の情報を反映しているわけではありません。イベントが終了してから、テーブルに記録されるまでに時間がかかる場合があります。events_waits_history_long
テーブルは、大量のデータを含んでいる可能性があります。このテーブルに頻繁にアクセスする場合は、パフォーマンスに影響を与える可能性があることに注意してください。- 上記のクエリはすべて、
performance_schema
データベースに対して実行する必要があります。
Performance Schema events_waits_history_long テーブルは、MySQLのパフォーマンスを分析するのに役立つ貴重な情報源ですが、いくつかの課題があります。
- 鮮度: テーブルには常に最新の情報が反映されているとは限りません。
- 複雑性: テーブルのスキーマは複雑で、必要な情報を見つけるのが難しい場合があります。
- データ量が多い: events_waits_history_long テーブルは、大量のデータを格納するため、クエリの実行が遅くなる可能性があります。
これらの課題に対処するために、events_waits_history_long テーブルの代替方法をいくつか検討することができます。
代替方法
- sys.innodb_mutex_waits_history_stats テーブル: このテーブルは、InnoDB mutex 待機に関する情報を提供します。 events_waits_history_long テーブルよりも小さく、クエリの実行速度が速くなります。ただし、他の種類の待機イベントに関する情報は含まれていません。
SELECT * FROM sys.innodb_mutex_waits_history_stats
ORDER BY WAIT_TIME DESC;
MySQL Enterprise Monitor: MySQL Enterprise Monitor (MEM) は、商用のパフォーマンス監視ツールで、events_waits_history_long テーブルよりも効率的に待機イベントデータを収集して分析することができます。MEM は、GUI を備えており、複雑なクエリを記述することなく、データを簡単に可視化することができます。
自分で作成したツール: 独自のツールを作成して、必要な待機イベントデータを収集して分析することもできます。これにより、ニーズに特化したツールを作成することができますが、開発とメンテナンスには時間と労力が必要です。
最適な代替方法の選択
最適な代替方法は、ニーズと要件によって異なります。 データ量が少ないテーブルが必要な場合は、sys.innodb_mutex_waits_history_stats
テーブルが適切な選択肢となります。 より高度な分析機能が必要な場合は、MEM を検討してください。 完全な制御と柔軟性を必要とする場合は、独自のツールを作成することを検討してください。
- データを圧縮する: データを圧縮することで、ストレージ要件を削減することができます。
- データを定期的にサンプリングする: 高頻度でデータを収集する代わりに、データを定期的にサンプリングすることで、データ量を削減することができます。
- 必要なデータのみを収集する: すべての待機イベントデータを収集するのではなく、分析に必要なデータのみを収集するようにしてください。