パフォーマンススキーマは、ステートメントの解析、テーブルのオープン、filesort
操作の実行など、ステートメント実行プロセス中のステップであるステージを計測します。 ステージは SHOW PROCESSLIST
によって表示されるか、または INFORMATION_SCHEMA.PROCESSLIST
テーブルに表示されるスレッドの状態に対応します。 ステージは、状態値が変化したときに開始および終了します。
イベント階層内では、待機イベントはステージイベント内にネストされ、ステージイベントはステートメントイベント内にネストされ、ステートメントイベントはトランザクションイベント内にネストされます。
これらのテーブルはステージイベントを格納します。
events_stages_current
: 各スレッドの現在のステージイベント。events_stages_history
: スレッドごとに終了した最新のステージイベント。events_stages_history_long
: グローバルに (すべてのスレッドで) 終了した最新のステージイベント。
次の各セクションでは、ステージイベントテーブルについて説明します。 ステージイベントに関する情報を集計するサマリーテーブルもあります。セクション27.12.18.2「ステージサマリーテーブル」を参照してください。
3 つのステージイベントテーブル間の関係の詳細は、セクション27.9「現在および過去のイベントのパフォーマンススキーマテーブル」 を参照してください。
ステージイベント収集の構成
ステージイベントを収集するかどうかを制御するには、関連するインストゥルメントおよびコンシューマの状態を設定します:
setup_instruments
テーブルには、stage
で始まる名前を持つインストゥルメントが格納されます。 これらのインストゥルメントを使用して、個々のステージイベントクラスの収集を有効または無効にします。setup_consumers
テーブルには、現在のステージイベントテーブル名と履歴ステージイベントテーブル名に対応する名前のコンシューマ値が含まれます。 これらのコンシューマを使用して、ステージイベントのコレクションをフィルタします。
ステージインストゥルメントは、ステートメントの進捗情報を提供するインストゥルメント以外、デフォルトでは無効になっています。 例:
mysql> SELECT NAME, ENABLED, TIMED
FROM performance_schema.setup_instruments
WHERE NAME RLIKE 'stage/sql/[a-c]';
+----------------------------------------------------+---------+-------+
| NAME | ENABLED | TIMED |
+----------------------------------------------------+---------+-------+
| stage/sql/After create | NO | NO |
| stage/sql/allocating local table | NO | NO |
| stage/sql/altering table | NO | NO |
| stage/sql/committing alter table to storage engine | NO | NO |
| stage/sql/Changing master | NO | NO |
| stage/sql/Checking master version | NO | NO |
| stage/sql/checking permissions | NO | NO |
| stage/sql/cleaning up | NO | NO |
| stage/sql/closing tables | NO | NO |
| stage/sql/Connecting to master | NO | NO |
| stage/sql/converting HEAP to MyISAM | NO | NO |
| stage/sql/Copying to group table | NO | NO |
| stage/sql/Copying to tmp table | NO | NO |
| stage/sql/copy to tmp table | NO | NO |
| stage/sql/Creating sort index | NO | NO |
| stage/sql/creating table | NO | NO |
| stage/sql/Creating tmp table | NO | NO |
+----------------------------------------------------+---------+-------+
ステートメントの進捗情報を提供するステージイベントインストゥルメントは、デフォルトで有効化され、時間設定されます:
mysql> SELECT NAME, ENABLED, TIMED
FROM performance_schema.setup_instruments
WHERE ENABLED='YES' AND NAME LIKE "stage/%";
+------------------------------------------------------+---------+-------+
| NAME | ENABLED | TIMED |
+------------------------------------------------------+---------+-------+
| stage/sql/copy to tmp table | YES | YES |
| stage/sql/Applying batch of row changes (write) | YES | YES |
| stage/sql/Applying batch of row changes (update) | YES | YES |
| stage/sql/Applying batch of row changes (delete) | YES | YES |
| stage/innodb/alter table (end) | YES | YES |
| stage/innodb/alter table (flush) | YES | YES |
| stage/innodb/alter table (insert) | YES | YES |
| stage/innodb/alter table (log apply index) | YES | YES |
| stage/innodb/alter table (log apply table) | YES | YES |
| stage/innodb/alter table (merge sort) | YES | YES |
| stage/innodb/alter table (read PK and internal sort) | YES | YES |
| stage/innodb/buffer pool load | YES | YES |
| stage/innodb/clone (file copy) | YES | YES |
| stage/innodb/clone (redo copy) | YES | YES |
| stage/innodb/clone (page copy) | YES | YES |
+------------------------------------------------------+---------+-------+
ステージコンシューマはデフォルトで無効にされています。
mysql> SELECT *
FROM performance_schema.setup_consumers
WHERE NAME LIKE 'events_stages%';
+----------------------------+---------+
| NAME | ENABLED |
+----------------------------+---------+
| events_stages_current | NO |
| events_stages_history | NO |
| events_stages_history_long | NO |
+----------------------------+---------+
サーバー起動時のステージイベント収集を制御するには、my.cnf
ファイルで次のような行を使用します:
-
有効化:
[mysqld] performance-schema-instrument='stage/%=ON' performance-schema-consumer-events-stages-current=ON performance-schema-consumer-events-stages-history=ON performance-schema-consumer-events-stages-history-long=ON
-
無効化:
[mysqld] performance-schema-instrument='stage/%=OFF' performance-schema-consumer-events-stages-current=OFF performance-schema-consumer-events-stages-history=OFF performance-schema-consumer-events-stages-history-long=OFF
実行時にステージイベント収集を制御するには、setup_instruments
テーブルと setup_consumers
テーブルを更新します:
-
有効化:
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'stage/%'; UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_stages%';
-
無効化:
UPDATE performance_schema.setup_instruments SET ENABLED = 'NO', TIMED = 'NO' WHERE NAME LIKE 'stage/%'; UPDATE performance_schema.setup_consumers SET ENABLED = 'NO' WHERE NAME LIKE 'events_stages%';
特定のステージイベントのみを収集するには、対応するステージインストゥルメントのみを有効にします。 特定のステージイベントテーブルに対してのみステージイベントを収集するには、ステージインストゥルメントを有効にしますが、目的のテーブルに対応するステージコンシューマのみを有効にします。
イベント収集の構成の詳細は、セクション27.3「パフォーマンススキーマ起動構成」 および セクション27.4「パフォーマンススキーマ実行時構成」 を参照してください。
ステージイベント進捗情報
パフォーマンススキーマのステージイベントテーブルには、ともに各行にステージ進捗インジケータを提供する 2 つのカラムが含まれています:
WORK_COMPLETED
: ステージで完了した作業ユニットの数WORK_ESTIMATED
: ステージに必要な作業ユニット数
インストゥルメントの進捗情報が指定されていない場合、各カラムは NULL
です。 情報が使用可能な場合、その解釈はインストゥルメントの実装によって完全に異なります。 「パフォーマンススキーマ」テーブルは、進捗データを格納するコンテナを提供しますが、メトリック自体のセマンティクスについては想定しません:
「「作業単位」」は、処理されるバイト数、行数、ファイル数、テーブル数など、実行中に時間の経過とともに増加する整数メトリックです。 特定のインストゥルメントの「「作業単位」」の定義は、データを提供するインストゥルメンテーションコードに残されます。
WORK_COMPLETED
値は、インストゥルメントされたコードに応じて、一度に 1 つ以上の単位を増やすことができます。WORK_ESTIMATED
値は、インストゥルメントコードに応じてステージ中に変更できます。
ステージイベント進捗インジケータのインストゥルメンテーションでは、次のいずれかの動作を実装できます:
-
進捗インスツルメンテーションなし
これは最も一般的なケースで、進捗データは提供されません。
WORK_COMPLETED
カラムとWORK_ESTIMATED
カラムはどちらもNULL
です。 -
無制限進捗インストゥルメンテーション
WORK_COMPLETED
カラムのみが意味を持ちます。WORK_ESTIMATED
カラムにはデータが提供されず、0 が表示されます。監視対象セッションの
events_stages_current
テーブルをクエリーすることで、監視アプリケーションはこれまでに実行された作業量をレポートできますが、ステージが完了間近であるかどうかはレポートできません。 現在、このようなステージはインストゥルメントされていません。 -
有限進捗インスツルメンテーション
WORK_COMPLETED
カラムとWORK_ESTIMATED
カラムの両方が意味を持ちます。このタイプの進捗インジケータは、あとで説明するテーブルコピーインストゥルメントなど、完了基準が定義された操作に適しています。 監視対象セッションの
events_stages_current
テーブルをクエリーすることで、監視アプリケーションはこれまでに実行された作業量をレポートし、WORK_COMPLETED
/WORK_ESTIMATED
比率を計算してステージの全体的な完了率をレポートできます。
stage/sql/copy to tmp table
インストゥルメントは、進捗インジケータがどのように機能するかを示します。 ALTER TABLE
ステートメントの実行中に stage/sql/copy to tmp table
ステージが使用され、コピーするデータのサイズによっては、このステージが長時間実行される可能性があります。
テーブルコピータスクには終了 (すべての行がコピーされます) が定義されており、stage/sql/copy to tmp table
ステージは指定されたバインド済進捗情報にインスツルメント処理されます: 使用される作業ユニットはコピーされた行数で、WORK_COMPLETED
と WORK_ESTIMATED
はどちらも意味があり、その比率はタスク完了率を示します。
インストゥルメントおよび関連するコンシューマを有効にするには、次のステートメントを実行します:
UPDATE performance_schema.setup_instruments
SET ENABLED='YES'
WHERE NAME='stage/sql/copy to tmp table';
UPDATE performance_schema.setup_consumers
SET ENABLED='YES'
WHERE NAME LIKE 'events_stages_%';
進行中の ALTER TABLE
ステートメントの進行状況を確認するには、events_stages_current
テーブルから選択します。