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「パフォーマンススキーマステージイベントテーブル」 を参照してください。
-
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
-
ステージイベントコンシューマテーブル (
events_stages_current
、events_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
-
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_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) に設定されました。