パフォーマンススキーマは、現在および最近のステートメントイベントを収集するためのテーブルを保持し、その情報をサマリーテーブルに集約します。セクション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_NAME
、USER
およびHOST
カラムがあります。 各行には、特定のアカウント (ユーザーとホストの組合せ) およびイベント名のイベントが要約されます。-
events_statements_summary_by_digest
にはSCHEMA_NAME
およびDIGEST
カラムがあります。 各行には、スキーマおよびダイジェスト値ごとにイベントが要約されます。 (DIGEST_TEXT
カラムには、対応する正規化されたステートメントダイジェストテキストが含まれますが、グループ化カラムでもサマリーカラムでもありません。QUERY_SAMPLE_TEXT
、QUERY_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_TYPE
、OBJECT_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_STAR
、SUM_TIMER_WAIT
、MIN_TIMER_WAIT
、AVG_TIMER_WAIT
、MAX_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_NAME
、DIGEST
)
-
events_transactions_summary_by_host_by_event_name
:主キー (
HOST
、EVENT_NAME
)
-
events_statements_summary_by_program
:主キー (
OBJECT_TYPE
,OBJECT_SCHEMA
,OBJECT_NAME
)
-
events_statements_summary_by_thread_by_event_name
:主キー (
THREAD_ID
、EVENT_NAME
)
-
events_transactions_summary_by_user_by_event_name
:主キー (
USER
、EVENT_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「イベントの事前フィルタリング」も参照してください。