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 テーブルの代替方法をいくつか検討することができます。

代替方法

  1. 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;
  1. MySQL Enterprise Monitor: MySQL Enterprise Monitor (MEM) は、商用のパフォーマンス監視ツールで、events_waits_history_long テーブルよりも効率的に待機イベントデータを収集して分析することができます。MEM は、GUI を備えており、複雑なクエリを記述することなく、データを簡単に可視化することができます。

  2. 自分で作成したツール: 独自のツールを作成して、必要な待機イベントデータを収集して分析することもできます。これにより、ニーズに特化したツールを作成することができますが、開発とメンテナンスには時間と労力が必要です。

最適な代替方法の選択

最適な代替方法は、ニーズと要件によって異なります。 データ量が少ないテーブルが必要な場合は、sys.innodb_mutex_waits_history_stats テーブルが適切な選択肢となります。 より高度な分析機能が必要な場合は、MEM を検討してください。 完全な制御と柔軟性を必要とする場合は、独自のツールを作成することを検討してください。

  • データを圧縮する: データを圧縮することで、ストレージ要件を削減することができます。
  • データを定期的にサンプリングする: 高頻度でデータを収集する代わりに、データを定期的にサンプリングすることで、データ量を削減することができます。
  • 必要なデータのみを収集する: すべての待機イベントデータを収集するのではなく、分析に必要なデータのみを収集するようにしてください。