MariaDB Performance Schema で SQL ステートメントの謎を解き明かす! events_statements_summary_by_host_by_event_name テーブル徹底解説

2024-05-22

MariaDBにおけるevents_statements_summary_by_host_by_event_nameテーブル:詳細解説

events_statements_summary_by_host_by_event_nameテーブルは、Performance Schemaスキーマの一部であり、MariaDBサーバー上で実行されたSQLステートメントに関する詳細なパフォーマンス情報を格納します。このテーブルは、データベースのパフォーマンスを分析し、潜在的な問題を特定するのに役立ちます。

テーブル構造

このテーブルには、以下の列が含まれます。

  • SCHEMA_NAME: ステートメントが実行されたスキーマ名
  • HOST_NAME: ステートメントを実行したホスト名
  • EVENT_NAME: ステートメントの種類(例:SELECT、INSERT、UPDATE、DELETEなど)
  • COUNT_STAR: 実行されたステートメントの総数
  • SUM_TIMER_WAIT: ステートメントの実行待機時間合計
  • SUM_ERRORS: 実行中に発生したエラー数
  • SUM_WARNINGS: 実行中に発生した警告数
  • SUM_ROWS_READ: 読み込まれた行数合計
  • SUM_ROWS_CHANGED: 変更された行数合計

主な用途

このテーブルは、以下の目的に使用できます。

  • 特定のホストで実行されるSQLステートメントの種類と頻度を分析する
  • 特定のタイプのステートメントのパフォーマンスを分析する
  • パフォーマンス問題の原因を特定する
  • データベースのパフォーマンスを監視する

活用例

以下に、このテーブルを活用する例をいくつか示します。

  • あるホストで実行されるSELECTステートメントのパフォーマンスを分析したい場合
SELECT SCHEMA_NAME, EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, SUM_ROWS_READ
FROM events_statements_summary_by_host_by_event_name
WHERE HOST_NAME = 'ホスト名'
AND EVENT_NAME LIKE 'SELECT%';
  • データベース全体で実行されるUPDATEステートメントのパフォーマンスを分析したい場合
SELECT SCHEMA_NAME, EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, SUM_ROWS_CHANGED
FROM events_statements_summary_by_host_by_event_name
WHERE EVENT_NAME = 'UPDATE';
  • パフォーマンス問題の原因を特定したい場合

  • 特定のホストまたはスキーマで実行時間が長いステートメントを特定します。

  • 特定のタイプのステートメントでエラーまたは警告が発生しているかどうかを確認します。

  • 読み込まれた行数と変更された行数の比率を確認して、クエリのパフォーマンスを分析します。

注意事項

  • このテーブルは、大量のデータを格納するため、定期的にクリーンアップする必要があります。
  • このテーブルは、パフォーマンスの監視にのみ使用することを目的としています。ステートメントの実行を修正するには、適切なクエリを分析する必要があります。


    MariaDBのevents_statements_summary_by_host_by_event_nameテーブルは、データベースのパフォーマンス分析に役立つ貴重な情報源です。このテーブルを活用することで、様々な視点からデータベースのパフォーマンスを分析することができます。

    本記事では、events_statements_summary_by_host_by_event_nameテーブルを様々な角度から分析するためのサンプルコードをいくつか紹介します。これらのコードを参考に、具体的なパフォーマンス課題の解決に役立ててください。

    特定のホストにおけるSQLステートメントの実行状況分析

    以下のコードは、特定のホストで実行されたSQLステートメントの種類と頻度、実行時間、読み込まれた行数、変更された行数などを分析します。

    SELECT SCHEMA_NAME, EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, SUM_ROWS_READ, SUM_ROWS_CHANGED
    FROM events_statements_summary_by_host_by_event_name
    WHERE HOST_NAME = 'ホスト名';
    

    このコードを実行することで、以下のような情報を得ることができます。

    • 各スキーマで実行されているステートメントの種類と頻度
    • 各ステートメントの実行時間
    • 各ステートメントで読み込まれた行数
    • 各ステートメントで変更された行数

    この情報をもとに、特定のステートメントがパフォーマンスボトルネックになっている可能性を特定することができます。

    特定のタイプのステートメントのパフォーマンス分析

    以下のコードは、データベース全体で実行された特定のタイプのステートメント(例:SELECT、INSERT、UPDATE、DELETEなど)のパフォーマンスを分析します。

    SELECT SCHEMA_NAME, EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, SUM_ROWS_READ, SUM_ROWS_CHANGED
    FROM events_statements_summary_by_host_by_event_name
    WHERE EVENT_NAME LIKE 'SELECT%';
    

    このコードを実行することで、以下のような情報を得ることができます。

    • 各SELECTステートメントの実行時間
    • 各SELECTステートメントで読み込まれた行数

    この情報をもとに、SELECTステートメントのパフォーマンスを改善するための施策を検討することができます。

    パフォーマンス問題の原因特定

    以下のコードは、パフォーマンス問題の原因となる可能性のあるステートメントを特定します。

    SELECT SCHEMA_NAME, EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, SUM_ERRORS, SUM_WARNINGS
    FROM events_statements_summary_by_host_by_event_name
    WHERE SUM_TIMER_WAIT > 1000 OR SUM_ERRORS > 0 OR SUM_WARNINGS > 0;
    

    このコードを実行することで、以下のような情報を得ることができます。

    • 実行時間が長いステートメント
    • エラーが発生しているステートメント

    この情報をもとに、問題のあるステートメントを修正することで、パフォーマンス問題を解決することができます。

    データベース全体のパフォーマンス監視

    以下のコードは、データベース全体のパフォーマンスを継続的に監視します。

    SELECT SCHEMA_NAME, EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, SUM_ROWS_READ, SUM_ROWS_CHANGED
    FROM events_statements_summary_by_host_by_event_name;
    

    このコードを実行することで、以下のような情報を得ることができます。

      この情報を定期的に収集することで、データベースのパフォーマンスの傾向を把握し、潜在的な問題を早期に発見することができます。

      注意事項

      • 上記のコードはあくまで例であり、具体的な分析目的や環境に合わせて調整する必要があります。
      • events_statements_summary_by_host_by_event_nameテーブルは、大量のデータを格納するため、定期的にクリーンアップする必要があります。

        これらのサンプルコードを活用し、events_statements_summary_by_host_by_event_nameテーブルを最大



        MariaDB Performance Schemaを活用した高度な分析手法

        これまでご紹介してきたサンプルコードは、MariaDB events_statements_summary_by_host_by_event_name テーブルを活用した基本的な分析手法です。しかし、Performance Schemaにはこの他にも多くの機能が備わっており、より高度な分析も可能です。

        ここでは、Performance Schema を活用した高度な分析手法をいくつかご紹介します。

        スロークエリ分析

        events_statements_summary_by_host_by_event_name テーブルには、ステートメントの実行時間に関する情報が含まれています。しかし、より詳細な分析を行うためには、events_statements_histogram_by_digest テーブルを活用する必要があります。

        このテーブルには、各ステートメントの実行時間に対するヒストグラム情報が格納されています。この情報をもとに、実行時間が長いクエリを特定し、その原因を分析することができます。

        例:実行時間が長いSELECTクエリを特定する

        SELECT DIGEST_TEXT, SUM_TIMER_WAIT
        FROM events_statements_histogram_by_digest
        WHERE EVENT_NAME LIKE 'SELECT%'
        ORDER BY SUM_TIMER_WAIT DESC
        LIMIT 10;
        

        長時間実行中のセッション分析

        events_statements_summary_by_thread_by_event_name テーブルには、各スレッドで実行されたステートメントに関する情報が含まれています。このテーブルを活用することで、長時間実行中のセッションを特定し、その原因を分析することができます。

        例:長時間実行中のセッションを特定する

        SELECT THREAD_ID, SUM_TIMER_WAIT
        FROM events_statements_summary_by_thread_by_event_name
        GROUP BY THREAD_ID
        ORDER BY SUM_TIMER_WAIT DESC
        LIMIT 10;
        

        テーブルロック分析

        events_waits_history_long テーブルには、テーブルロックに関する情報が含まれています。このテーブルを活用することで、ロック待機時間が長いトランザクションを特定し、その原因を分析することができます。

        例:ロック待機時間が長いトランザクションを特定する

        SELECT OBJECT_INSTANCE_NAME, SUM_WAIT_TIME
        FROM events_waits_history_long
        WHERE OBJECT_TYPE = 'TABLE'
        GROUP BY OBJECT_INSTANCE_NAME
        ORDER BY SUM_WAIT_TIME DESC
        LIMIT 10;
        

        キャッシュヒット率分析

        events_statements_summary_by_digest テーブルには、キャッシュヒット率に関する情報が含まれています。この情報をもとに、キャッシュヒット率が低いクエリを特定し、その原因を分析することができます。

        例:キャッシュヒット率が低いクエリを特定する

        SELECT DIGEST_TEXT, SUM_TIMER_WAIT, SUM_ROWS_READ, SUM_ROWS_CHANGED
        FROM events_statements_summary_by_digest
        WHERE SUM_ROWS_READ > 0 AND SUM_ROWS_CHANGED = 0
        ORDER BY SUM_TIMER_WAIT / SUM_ROWS_READ DESC
        LIMIT 10;
        

        ユーザーアクティビティ分析

        events_statements_summary_by_user_by_event_name テーブルには、各ユーザーが実行したステートメントに関する情報が含まれています。このテーブルを活用することで、個々のユーザーのアクティビティを分析することができます。

        例:特定のユーザーが実行したSELECTクエリを分析する

        SELECT USER, DIGEST_TEXT, SUM_TIMER_WAIT, SUM_ROWS_READ
        FROM events_statements_summary_by_user_by_event_name
        WHERE USER = 'ユーザー名' AND EVENT_NAME LIKE 'SELECT%';
        

        注意事項

        • 上記の分析手法は高度な知識を必要とする場合があるため、データベース管理者などの専門家にご相談することをおすすめします。
        • Performance Schema は多くの情報を格納するため、分析対象を絞り込むことが重要です。
        • 分析結果を正しく解釈するために、データベースの動作に関する知識が必要です。