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


MySQL 8.0 リファレンスマニュアル  /  ...  /  パフォーマンススキーマを使用した InnoDB テーブルの ALTER TABLE の進行状況のモニタリング

15.16.1 パフォーマンススキーマを使用した InnoDB テーブルの ALTER TABLE の進行状況のモニタリング

Performance Schema を使用して、InnoDB テーブルの ALTER TABLE 進捗を監視できます。

ALTER TABLE の様々なフェーズを表す 7 つのステージイベントがあります。 各ステージイベントでは、ALTER TABLE 操作全体の様々なフェーズの進行に応じて、WORK_COMPLETED および WORK_ESTIMATED の累積合計がレポートされます。 WORK_ESTIMATED は、ALTER TABLE が実行するすべての作業を考慮した式を使用して計算され、ALTER TABLE の処理中に改訂できます。 WORK_COMPLETED および WORK_ESTIMATED の値は、ALTER TABLE によって実行されるすべての作業の抽象表現です。

発生順に、ALTER TABLE ステージイベントには次のものが含まれます:

  • stage/innodb/alter table (read PK and internal sort): このステージは、ALTER TABLE が読取り - 主キーフェーズにある場合にアクティブになります。 これは、主キーの推定ページ数に設定された WORK_COMPLETED=0 および WORK_ESTIMATED から始まります。 ステージが完了すると、WORK_ESTIMATED は主キーの実際のページ数に更新されます。

  • stage/innodb/alter table (merge sort): このステージは、ALTER TABLE 操作によって追加されたインデックスごとに繰り返されます。

  • stage/innodb/alter table (insert): このステージは、ALTER TABLE 操作によって追加されたインデックスごとに繰り返されます。

  • stage/innodb/alter table (log apply index): このステージには、ALTER TABLE の実行中に生成された DML ログの適用が含まれます。

  • stage/innodb/alter table (flush): このステージが開始される前に、フラッシュリストの長さに基づいて、より正確な見積りで WORK_ESTIMATED が更新されます。

  • stage/innodb/alter table (log apply table): このステージには、ALTER TABLE の実行中に生成された同時 DML ログの適用が含まれます。 このフェーズの期間は、テーブルの変更の程度によって異なります。 テーブルに対して同時 DML が実行されなかった場合、このフェーズは即時です。

  • stage/innodb/alter table (end): ALTER TABLE の実行中にテーブルに対して実行された DML の再適用など、フラッシュフェーズ後に表示された残りの作業が含まれます。

注記

InnoDB ALTER TABLE ステージイベントでは、現在空間インデックスの追加は考慮されていません。

パフォーマンススキーマを使用した ALTER TABLE のモニタリングの例

次の例は、stage/innodb/alter table% ステージイベントインストゥルメントおよび関連するコンシューマテーブルを有効にして ALTER TABLE の進行状況を監視する方法を示しています。 パフォーマンススキーマステージイベントインストゥルメントおよび関連コンシューマについては、セクション27.12.5「パフォーマンススキーマステージイベントテーブル」 を参照してください。

  1. stage/innodb/alter% インストゥルメントを有効にします:

    mysql> UPDATE performance_schema.setup_instruments
           SET ENABLED = 'YES'
           WHERE NAME LIKE 'stage/innodb/alter%';
    Query OK, 7 rows affected (0.00 sec)
    Rows matched: 7  Changed: 7  Warnings: 0
  2. ステージイベントコンシューマテーブル (events_stages_currentevents_stages_history および events_stages_history_long を含む) を有効にします。

    mysql> UPDATE performance_schema.setup_consumers
           SET ENABLED = 'YES'
           WHERE NAME LIKE '%stages%';
    Query OK, 3 rows affected (0.00 sec)
    Rows matched: 3  Changed: 3  Warnings: 0
  3. ALTER TABLE 操作を実行します。 この例では、employees サンプルデータベースの employees テーブルに middle_name カラムが追加されます。

    mysql> ALTER TABLE employees.employees ADD COLUMN middle_name varchar(14) AFTER first_name;
    Query OK, 0 rows affected (9.27 sec)
    Records: 0  Duplicates: 0  Warnings: 0
  4. パフォーマンススキーマ events_stages_current テーブルをクエリーして、ALTER TABLE 操作の進行状況を確認します。 表示されるステージイベントは、現在進行中の ALTER TABLE フェーズによって異なります。 WORK_COMPLETED カラムには、完了した作業が表示されます。 WORK_ESTIMATED カラムには、残りの作業の見積りが表示されます。

    mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
           FROM performance_schema.events_stages_current;
    +------------------------------------------------------+----------------+----------------+
    | EVENT_NAME                                           | WORK_COMPLETED | WORK_ESTIMATED |
    +------------------------------------------------------+----------------+----------------+
    | stage/innodb/alter table (read PK and internal sort) |            280 |           1245 |
    +------------------------------------------------------+----------------+----------------+
    1 row in set (0.01 sec)

    ALTER TABLE 操作が完了すると、events_stages_current テーブルは空のセットを返します。 この場合、events_stages_history テーブルをチェックして、完了した操作のイベントデータを表示できます。 例:

    mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
           FROM performance_schema.events_stages_history;
    +------------------------------------------------------+----------------+----------------+
    | EVENT_NAME                                           | WORK_COMPLETED | WORK_ESTIMATED |
    +------------------------------------------------------+----------------+----------------+
    | stage/innodb/alter table (read PK and internal sort) |            886 |           1213 |
    | stage/innodb/alter table (flush)                     |           1213 |           1213 |
    | stage/innodb/alter table (log apply table)           |           1597 |           1597 |
    | stage/innodb/alter table (end)                       |           1597 |           1597 |
    | stage/innodb/alter table (log apply table)           |           1981 |           1981 |
    +------------------------------------------------------+----------------+----------------+
    5 rows in set (0.00 sec)

    前述のように、WORK_ESTIMATED 値は ALTER TABLE 処理中に改訂されました。 初期ステージの完了後の見積作業は 1213 です。 ALTER TABLE の処理が完了すると、WORK_ESTIMATED は実際の値 (1981) に設定されました。


関連キーワード:  InnoDB, テーブル, TABLE, WORK, 構成, stage, ESTIMATED, インデックス, 圧縮, 実行