MariaDBのデータベースパフォーマンスを最大化せよ!events_statements_summary_by_account_by_event_nameテーブルでSQL文を徹底チューニング


パフォーマンス分析とトラブルシューティングに役立ちます

主な用途

  • 特定のユーザーまたはホストによるデータベースの使用状況を監視する
  • パフォーマンスのボトルネックを特定する
  • 特定のタイプの SQL 文の実行にかかる時間を分析する
  • 特定のユーザーまたはホストによって実行された SQL 文の数を特定する

テーブル構造

カラム名データ型説明
USERVARCHAR(32)SQL 文を実行したユーザーの名前
HOSTVARCHAR(255)SQL 文を実行したホストの名前
EVENT_NAMEVARCHAR(128)SQL 文のイベント名 (例: selectupdatedelete など)
SUM_STARTSBIGINT特定のアカウント、ホスト、およびイベント名に対して開始された SQL 文の合計数
SUM_LATENCY_SUMBIGINT特定のアカウント、ホスト、およびイベント名に対して実行された SQL 文の合計実行時間 (マイクロ秒単位)
SUM_ROWS_READBIGINT特定のアカウント、ホスト、およびイベント名に対して読み取られた行の合計数
SUM_ROWS_CHANGEDBIGINT特定のアカウント、ホスト、およびイベント名に対して変更された行の合計数
SUM_BYTES_READBIGINT特定のアカウント、ホスト、およびイベント名に対して読み取られたバイトの合計数
SUM_BYTES_CHANGEDBIGINT特定のアカウント、ホスト、およびイベント名に対して変更されたバイトの合計数

クエリ例

以下のクエリは、USER root によって実行された SELECT 文に関する情報を取得します。

SELECT *
FROM performance_schema.events_statements_summary_by_account_by_event_name
WHERE USER = 'root' AND EVENT_NAME = 'SELECT';

注意事項

  • このテーブルは、大量のデータを格納するため、パフォーマンスに影響を与える可能性があります。必要に応じて、events_statements_history_long テーブルを使用することを検討してください。
  • events_statements_summary_by_account_by_event_name テーブルは、定期的に更新されます。更新間隔は、performance_schema 設定によって異なります。

この解説に加え、以下の点にも留意してください。

  • Performance Schema を使用するには、適切な権限を持っている必要があります。
  • events_statements_summary_by_account_by_event_name テーブル以外にも、Performance Schema には SQL 文の実行に関する情報を提供するテーブルがいくつかあります。
  • Performance Schema は、MariaDB 5.5 以降で使用できます。


SELECT USER, EVENT_NAME, SUM_STARTS
FROM performance_schema.events_statements_summary_by_account_by_event_name
WHERE USER = 'root' AND EVENT_NAME = 'SELECT';

特定のホストで実行されたすべての SQL 文の実行時間を合計

SELECT HOST, EVENT_NAME, SUM_LATENCY_SUM
FROM performance_schema.events_statements_summary_by_account_by_event_name
GROUP BY HOST, EVENT_NAME;

特定のアカウントで読み取られた行の合計数を取得

SELECT USER, SUM_ROWS_READ
FROM performance_schema.events_statements_summary_by_account_by_event_name
GROUP BY USER;

特定のイベント名で変更されたバイトの合計数を取得

SELECT EVENT_NAME, SUM_BYTES_CHANGED
FROM performance_schema.events_statements_summary_by_account_by_event_name
GROUP BY EVENT_NAME;

特定のユーザー、ホスト、およびイベント名に関するすべてのメトリクスを表示

SELECT *
FROM performance_schema.events_statements_summary_by_account_by_event_name
WHERE USER = 'root' AND HOST = 'localhost' AND EVENT_NAME = 'SELECT';

特定の期間における SQL 文の実行に関する情報を取得

SELECT *
FROM performance_schema.events_statements_summary_by_account_by_event_name
WHERE TIMESTAMP BETWEEN '2024-07-10 00:00:00' AND '2024-07-11 00:00:00';
DESCRIBE performance_schema.events_statements_summary_by_account_by_event_name;


events_statements_summary_by_digest テーブルは、events_statements_summary_by_account_by_event_name テーブルと似ていますが、アカウントやホストの情報ではなく、SQL 文のダイジェストに基づいてデータを格納します。

利点

  • 特定の SQL 文のパターンを分析するのに役立ちます。
  • データ量が少なく、必要な情報をより迅速に取得できる場合があります。

欠点

  • アカウントやホストに関する情報が得られないため、特定のユーザーまたはホストによるアクティビティを分析するには適していない場合があります。

events_statements_history_long テーブル

events_statements_history_long テーブルは、events_statements_summary_by_account_by_event_name テーブルよりも詳細な情報を格納する履歴テーブルです。

利点

  • 長期間にわたってデータを追跡するのに役立ちます。
  • 各 SQL 文の実行に関する詳細な情報 (実行時間、読み取り/書き込み行数、使用されたバイト数など) を提供します。

欠点

  • events_statements_summary_by_account_by_event_name テーブルほど頻繁に更新されない場合があります。
  • データ量が多いため、パフォーマンスに影響を与える可能性があります。

カスタムクエリ

必要な情報を取得するために、events_statements_current テーブルなどの Performance Schema テーブルに対してカスタム クエリを実行することもできます。

利点

  • 特定のニーズに合わせたデータを正確に取得できます。

欠点

  • パフォーマンスに影響を与える可能性があります。
  • クエリを自分で作成および保守する必要があります。

サードパーティ製ツール

  • Percona Toolkit: オープンソースの MySQL パフォーマンス ツールキットです。pt-query-summary コマンドなどのツールを使用して、events_statements_summary_by_account_by_event_name テーブルなどの Performance Schema テーブルからのデータを分析することができます。
  • MySQL Enterprise Monitor: MySQL のパフォーマンスを監視および分析するための商用ツールです。events_statements_summary_by_account_by_event_name テーブルなどの Performance Schema テーブルからのデータを可視化し、分析することができます。
  • MySQL のパフォーマンスを包括的に監視および分析したい場合は、MySQL Enterprise Monitor などのサードパーティ製ツールを使用するのが最適です。
  • 特定のニーズに合わせたデータを正確に取得する必要がある場合は、カスタム クエリを使用するのが最適です。
  • 長期間にわたって詳細なデータを追跡する場合は、events_statements_history_long テーブルが最適な選択肢です。
  • 特定の SQL 文のパターンを分析する場合は、events_statements_summary_by_digest テーブルが最適な選択肢です。
  • 特定のユーザーまたはホストによるアクティビティを分析する場合は、events_statements_summary_by_account_by_event_name テーブルが最適な選択肢です。