このページは機械翻訳したものです。
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) に設定されました。