MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
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 ステージイベントでは、現在空間インデックスの追加は考慮されていません。
次の例は、stage/innodb/alter table% ステージイベントインストゥルメントおよび関連するコンシューマテーブルを有効にして ALTER TABLE の進行状況を監視する方法を示しています。 パフォーマンススキーマステージイベントインストゥルメントおよび関連コンシューマについては、セクション27.12.5「パフォーマンススキーマステージイベントテーブル」 を参照してください。
stage/innodb/alter% インストゥルメントを有効にします:
mysql>UPDATE performance_schema.setup_instrumentsSET ENABLED = 'YES'WHERE NAME LIKE 'stage/innodb/alter%';Query OK, 7 rows affected (0.00 sec) Rows matched: 7 Changed: 7 Warnings: 0
ステージイベントコンシューマテーブル (events_stages_current、events_stages_history および events_stages_history_long を含む) を有効にします。
mysql>UPDATE performance_schema.setup_consumersSET ENABLED = 'YES'WHERE NAME LIKE '%stages%';Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0
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
パフォーマンススキーマ events_stages_current テーブルをクエリーして、ALTER TABLE 操作の進行状況を確認します。 表示されるステージイベントは、現在進行中の ALTER TABLE フェーズによって異なります。 WORK_COMPLETED カラムには、完了した作業が表示されます。 WORK_ESTIMATED カラムには、残りの作業の見積りが表示されます。
mysql>SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATEDFROM 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_ESTIMATEDFROM 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) に設定されました。