MySQL 8.0 リファレンスマニュアル


27.12.18.3 ステートメントサマリーテーブル

パフォーマンススキーマは、現在および最近のステートメントイベントを収集するためのテーブルを保持し、その情報をサマリーテーブルに集約します。セクション27.12.6「パフォーマンススキーマステートメントイベントテーブル」 は、ステートメントのサマリーの基になるイベントを記述します。 ステートメントイベントの内容、現在および過去のステートメントイベントテーブル、およびステートメントイベント収集の制御方法 (デフォルトでは部分的に無効になっています) については、その説明を参照してください。

ステートメントイベントサマリー情報の例:

mysql> SELECT *
       FROM performance_schema.events_statements_summary_global_by_event_name\G
*************************** 1. row ***************************
                 EVENT_NAME: statement/sql/select
                 COUNT_STAR: 25
             SUM_TIMER_WAIT: 1535983999000
             MIN_TIMER_WAIT: 209823000
             AVG_TIMER_WAIT: 61439359000
             MAX_TIMER_WAIT: 1363397650000
              SUM_LOCK_TIME: 20186000000
                 SUM_ERRORS: 0
               SUM_WARNINGS: 0
          SUM_ROWS_AFFECTED: 0
              SUM_ROWS_SENT: 388
          SUM_ROWS_EXAMINED: 370
SUM_CREATED_TMP_DISK_TABLES: 0
     SUM_CREATED_TMP_TABLES: 0
       SUM_SELECT_FULL_JOIN: 0
 SUM_SELECT_FULL_RANGE_JOIN: 0
           SUM_SELECT_RANGE: 0
     SUM_SELECT_RANGE_CHECK: 0
            SUM_SELECT_SCAN: 6
      SUM_SORT_MERGE_PASSES: 0
             SUM_SORT_RANGE: 0
              SUM_SORT_ROWS: 0
              SUM_SORT_SCAN: 0
          SUM_NO_INDEX_USED: 6
     SUM_NO_GOOD_INDEX_USED: 0
...

各ステートメントサマリーテーブルには、テーブルのイベントの集計方法を示す 1 つまたは複数のグループ化カラムがあります。 イベント名は、setup_instruments テーブル内のイベントインストゥルメントの名前を参照します:

  • events_statements_summary_by_account_by_event_name には、EVENT_NAMEUSER および HOST カラムがあります。 各行には、特定のアカウント (ユーザーとホストの組合せ) およびイベント名のイベントが要約されます。

  • events_statements_summary_by_digest には SCHEMA_NAME および DIGEST カラムがあります。 各行には、スキーマおよびダイジェスト値ごとにイベントが要約されます。 (DIGEST_TEXT カラムには、対応する正規化されたステートメントダイジェストテキストが含まれますが、グループ化カラムでもサマリーカラムでもありません。 QUERY_SAMPLE_TEXTQUERY_SAMPLE_SEEN および QUERY_SAMPLE_TIMER_WAIT カラムもグループ化カラムでもサマリーカラムでもありません。これらはステートメントサンプリングをサポートしています。)

    テーブルの最大行数は、サーバー起動時に自動サイズ設定されます。 この最大を明示的に設定するには、サーバー起動時に performance_schema_digests_size システム変数を設定します。

  • events_statements_summary_by_host_by_event_name には、EVENT_NAME カラムおよび HOST カラムがあります。 各行には、特定のホストおよびイベント名のイベントが要約されます。

  • events_statements_summary_by_program には、OBJECT_TYPEOBJECT_SCHEMA および OBJECT_NAME カラムがあります。 各行には、特定のストアドプログラム (ストアドプロシージャーまたはストアドファンクション、トリガー、またはイベント) のイベントが要約されます。

  • events_statements_summary_by_thread_by_event_name には THREAD_ID および EVENT_NAME カラムがあります。 各行は特定のスレッドおよびイベント名のイベントを要約します。

  • events_statements_summary_by_user_by_event_name には、EVENT_NAME カラムおよび USER カラムがあります。 各行には、特定のユーザーおよびイベント名のイベントが要約されます。

  • events_statements_summary_global_by_event_name には EVENT_NAME カラムがあります。 各行は特定のイベント名のイベントを要約します。

  • prepared_statements_instances には OBJECT_INSTANCE_BEGIN カラムがあります。 各行には、指定されたプリペアドステートメントのイベントが要約されます。

各ステートメント要約テーブルには、集計値を含む次の要約カラムがあります (ただし、次の例外があります):

  • COUNT_STARSUM_TIMER_WAITMIN_TIMER_WAITAVG_TIMER_WAITMAX_TIMER_WAIT

    これらのカラムは、ステートメントサマリーテーブルが events_waits_current ではなく events_statements_current からイベントを集約する点を除き、待機イベントサマリーテーブル (セクション27.12.18.1「待機イベント要約テーブル」 を参照) 内の同じ名前のカラムに似ています。

    prepared_statements_instances テーブルには、これらのカラムはありません。

  • SUM_xxx

    events_statements_current テーブル内の対応する xxx カラムの集計。 たとえば、ステートメントサマリーテーブルの SUM_LOCK_TIME および SUM_ERRORS カラムは events_statements_current テーブルの LOCK_TIME および ERRORS カラムの集計です。

events_statements_summary_by_digest テーブルにはこれらの追加のサマリーカラムがあります。

  • FIRST_SEEN, LAST_SEEN

    指定されたダイジェスト値を持つステートメントがいつ最初に見られ、最後に見られたかを示すタイムスタンプ。

  • QUANTILE_95: ステートメントレイテンシの 95 パーセンタイル (ピコ秒)。 このパーセンタイルは、収集されたヒストグラムデータから計算された高い見積りです。 つまり、特定のダイジェストについて、測定されたステートメントの 95% のレイテンシは QUANTILE_95 よりも低くなります。

    ヒストグラムデータにアクセスするには、セクション27.12.18.4「ステートメントヒストグラム要約テーブル」 で説明されているテーブルを使用します。

  • QUANTILE_99: QUANTILE_95 と似ていますが、99 パーセンタイルです。

  • QUANTILE_999: QUANTILE_95 と似ていますが、99.9 の第一パーセンタイル用です。

events_statements_summary_by_digest テーブルには、次のカラムが含まれます。 これらはグループ化カラムでもサマリーカラムでもなく、ステートメントサンプリングをサポートしています:

  • QUERY_SAMPLE_TEXT

    行にダイジェスト値を生成するサンプル SQL ステートメント。 このカラムを使用すると、アプリケーションは、特定のダイジェスト値について、そのダイジェストを生成するサーバーによって実際に表示されるステートメントにアクセスできます。 これを使用するには、頻繁に発生するダイジェストに関連付けられた代表的なステートメントの実行計画を調べるために、ステートメントに対して EXPLAIN を実行します。

    QUERY_SAMPLE_TEXT カラムに値が割り当てられると、QUERY_SAMPLE_SEEN および QUERY_SAMPLE_TIMER_WAIT カラムにも値が割り当てられます。

    ステートメントの表示に使用できる最大領域は、デフォルトで 1024 バイトです。 この値を変更するには、サーバーの起動時に performance_schema_max_sql_text_length システム変数を設定します。 (この値を変更すると、他の「パフォーマンススキーマ」テーブルのカラムにも影響します。 セクション27.10「パフォーマンススキーマのステートメントダイジェストとサンプリング」を参照してください。)

    ステートメントサンプリングの詳細は、セクション27.10「パフォーマンススキーマのステートメントダイジェストとサンプリング」 を参照してください。

  • QUERY_SAMPLE_SEEN

    QUERY_SAMPLE_TEXT カラムのステートメントがいつ見られたかを示すタイムスタンプ。

  • QUERY_SAMPLE_TIMER_WAIT

    QUERY_SAMPLE_TEXT カラムのサンプルステートメントの待機時間。

events_statements_summary_by_program テーブルには、次の追加のサマリーカラムがあります:

  • COUNT_STATEMENTS, SUM_STATEMENTS_WAIT, MIN_STATEMENTS_WAIT, AVG_STATEMENTS_WAIT, MAX_STATEMENTS_WAIT

    ストアドプログラムの実行中に呼び出されたネストされたステートメントに関する統計。

prepared_statements_instances テーブルには、次の追加のサマリーカラムがあります:

  • COUNT_EXECUTE, SUM_TIMER_EXECUTE, MIN_TIMER_EXECUTE, AVG_TIMER_EXECUTE, MAX_TIMER_EXECUTE

    プリペアドステートメントの実行の集計統計。

ステートメントサマリーテーブルには、次のインデックスがあります:

  • events_transactions_summary_by_account_by_event_name:

    • 主キー (USER, HOST, EVENT_NAME)

  • events_statements_summary_by_digest:

    • 主キー (SCHEMA_NAMEDIGEST)

  • events_transactions_summary_by_host_by_event_name:

    • 主キー (HOSTEVENT_NAME)

  • events_statements_summary_by_program:

    • 主キー (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME)

  • events_statements_summary_by_thread_by_event_name:

    • 主キー (THREAD_IDEVENT_NAME)

  • events_transactions_summary_by_user_by_event_name:

    • 主キー (USEREVENT_NAME)

  • events_statements_summary_global_by_event_name:

    • 主キー (EVENT_NAME)

TRUNCATE TABLE はステートメントサマリーテーブルに使用できます。 これには次の効果があります:

  • events_statements_summary_by_digest の場合は、行を削除します。

  • アカウント、ホストまたはユーザーごとに集計されない他のサマリーテーブルの場合、切捨てによって、行が削除されるのではなくサマリーカラムがゼロにリセットされます。

  • アカウント、ホストまたはユーザー別に集計された他のサマリーテーブルの場合、切捨てによって、接続のないアカウント、ホストまたはユーザーの行が削除され、残りの行のサマリーカラムがゼロにリセットされます。

また、アカウント、ホスト、ユーザーまたはスレッド別に集計された各ステートメントサマリーテーブルは、依存する接続テーブルの切捨てまたは events_statements_summary_global_by_event_name の切捨てによって暗黙的に切り捨てられます。 詳細は、セクション27.12.8「パフォーマンススキーマ接続テーブル」を参照してください。

また、events_statements_summary_by_digest を切り捨てると events_statements_histogram_by_digest が暗黙的に切り捨てられ、events_statements_summary_global_by_event_name を切り捨てると events_statements_histogram_global が暗黙的に切り捨てられます。

ステートメントダイジェストアグリゲーションルール

statements_digest コンシューマが有効な場合、events_statements_summary_by_digest への集計はステートメントの完了時に次のように行われます。 アグリゲーションはステートメントに対して計算された DIGEST 値に基づきます。

  • 完了したばかりのステートメントのダイジェスト値のある events_statements_summary_by_digest 行がすでに存在する場合、ステートメントの統計はその行に集計されます。 LAST_SEEN カラムは現在の時間に更新されます。

  • 完了したばかりのステートメントのダイジェスト値のある行がなく、テーブルがいっぱいでない場合、そのステートメントに対して新しい行が作成されます。 FIRST_SEEN および LAST_SEEN カラムは現在の時間で初期化されます。

  • 完了したばかりのステートメントのステートメントダイジェスト値のある行がなく、テーブルがいっぱいである場合、完了したばかりのステートメントの統計が、必要に応じて作成される特別な多目的行に、DIGEST = NULL で追加されます。 この行が作成された場合、FIRST_SEEN および LAST_SEEN カラムは現在の時間で初期化されます。 そうでない場合、LAST_SEEN カラムが現在の時間で更新されます。

パフォーマンススキーマテーブルには、メモリー制約による最大サイズがあるため、DIGEST = NULL の行は保守されます。 DIGEST = NULL 行は、ほかの行に一致しないダイジェストが、サマリーテーブルがいっぱいである場合でも、共通のほかのバケットを使用して、カウントされることを許可します。 この行は、ダイジェストサマリーが代表的であるかどうかを推定するのに役立ちます。

  • すべてのダイジェストのうち 5% を表す COUNT_STAR 値がある DIGEST = NULL 行は、ダイジェストサマリーテーブルがきわめて代表的であることを示します。ほかの行が、存在するステートメントの 95% を占めます。

  • すべてのダイジェストのうち 50% を表す COUNT_STAR 値がある DIGEST = NULL 行は、ダイジェストサマリーテーブルがあまり代表的でないことを示します。ほかの行は、存在するステートメントの半分しか占めません。 たいていの場合に DBA は DIGEST = NULL 行にカウントされる行の多くが、代わりにより具体的な行を使用してカウントされるように、最大テーブルサイズを拡大するべきです。 これを実行するには、サーバーの起動時に、performance_schema_digests_size システム変数を大きな値に設定します。 デフォルトサイズは 200 です。

ストアドプログラムインツルメンテーションの動作

setup_objects テーブルでインスツルメンテーションが有効になっているストアドプログラムタイプの場合、events_statements_summary_by_program は次のようにストアドプログラムの統計を保持します:

  • 行は、サーバーで最初に使用されたときにオブジェクトに追加されます。

  • オブジェクトの行は、オブジェクトが削除されると削除されます。

  • 統計は、実行時にオブジェクトの行で集計されます。

セクション27.4.3「イベントの事前フィルタリング」も参照してください。


関連キーワード:  テーブル, events, カラム, ステートメント, statements, パフォーマンス, スキーマ, イベント, SUM, summary