Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


MySQL 8.0 リファレンスマニュアル  /  ...  /  パフォーマンススキーマステージイベントテーブル

このページは機械翻訳したものです。

27.12.5 パフォーマンススキーマステージイベントテーブル

パフォーマンススキーマは、ステートメントの解析、テーブルのオープン、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_COMPLETEDWORK_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 テーブルから選択します。