MySQL 5.6.3 以降、パフォーマンススキーマは現在および最近のステートメントイベントを集計するためのテーブルを保守し、その情報をサマリーテーブルに集計します。セクション22.9.6「パフォーマンススキーマステートメントイベントテーブル」で、ステートメントサマリーが基づいているイベントについて説明しています。ステートメントイベントの内容、現在および最近のステートメントイベントテーブル、およびステートメントイベント収集の制御方法に関する情報については、その説明を参照してください。
各ステートメントサマリーテーブルには、テーブルのイベントの集計方法を示す 1 つまたは複数のグループ化カラムがあります。イベント名は、setup_instruments
テーブル内のイベントインストゥルメントの名前を表します。
-
events_statements_summary_by_digest
にはSCHEMA_NAME
およびDIGEST
カラムがあります。各行は特定のスキーマ/ダイジェスト値のイベントを要約します。(DIGEST_TEXT
カラムは、対応する正規化されたステートメントダイジェストテキストを格納しますが、グループ化カラムでもサマリーカラムでもありません。)このテーブルは、5.6.5 で追加されました。MySQL 5.6.9 より前では、
SCHEMA_NAME
カラム値がなく、グループ化はDIGEST
値のみに基づきます。 events_statements_summary_by_thread_by_event_name
にはTHREAD_ID
およびEVENT_NAME
カラムがあります。各行は特定のスレッドおよびイベント名のイベントを要約します。events_statements_summary_global_by_event_name
にはEVENT_NAME
カラムがあります。各行は特定のイベント名のイベントを要約します。
すべてのステートメントサマリーテーブルには、集計された値を格納するこれらのサマリーカラムがあります。
-
COUNT_STAR
、SUM_TIMER_WAIT
、MIN_TIMER_WAIT
、AVG_TIMER_WAIT
、MAX_TIMER_WAIT
ステートメントサマリーテーブルは、
events_waits_current
ではなくevents_statements_current
からイベントを集計することを除き、これらのカラムはイベント待機サマリーテーブル (セクション22.9.9.1「イベント待機サマリーテーブル」を参照) の同じ名前のカラムに似ています。 -
SUM_
xxx
events_statements_current
テーブル内の対応するxxx
カラムの集計。たとえば、ステートメントサマリーテーブルのSUM_LOCK_TIME
およびSUM_ERRORS
カラムはevents_statements_current
テーブルのLOCK_TIME
およびERRORS
カラムの集計です。
events_statements_summary_by_digest
テーブルにはこれらの追加のサマリーカラムがあります。
-
FIRST_SEEN_TIMESTAMP
、LAST_SEEN_TIMESTAMP
特定のダイジェスト値を持つステートメントが最初に確認された時間と最後に確認された時間。
ステートメントイベントサマリー情報の例:
mysql> SELECT * FROM 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
...
TRUNCATE TABLE
はステートメントサマリーテーブルに使用できます。events_statements_summary_by_digest
に対して、それはテーブルを空にします。ほかのステートメントサマリーテーブルに対して、それは行を削除するのではなく、サマリーカラムを 0 にリセットします。
ステートメントダイジェストアグリゲーションルール
statement_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 です。