文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  使用效能結構描述監控 InnoDB 資料表的 ALTER TABLE 進度

17.16.1 使用效能結構描述監控 InnoDB 資料表的 ALTER TABLE 進度

您可以使用效能結構描述監控 InnoDB 資料表的 ALTER TABLE 進度。

有七個階段事件代表 ALTER TABLE 的不同階段。每個階段事件都會報告 WORK_COMPLETEDWORK_ESTIMATED 的執行總計,用於整個 ALTER TABLE 操作,因為它會通過不同的階段。 WORK_ESTIMATED 是使用一個公式計算的,該公式會考量 ALTER TABLE 執行的所有工作,並且可能會在 ALTER TABLE 處理期間進行修訂。WORK_COMPLETEDWORK_ESTIMATED 值是 ALTER TABLE 執行的所有工作的抽象表示。

按照發生的順序,ALTER TABLE 階段事件包括

  • stage/innodb/alter table (讀取 PK 與內部排序):當 ALTER TABLE 處於讀取主索引鍵階段時,此階段處於活動狀態。它以 WORK_COMPLETED=0 開始,並將 WORK_ESTIMATED 設定為主索引鍵中估計的頁面數。當階段完成時,WORK_ESTIMATED 會更新為主索引鍵中的實際頁面數。

  • stage/innodb/alter table (合併排序):對於 ALTER TABLE 操作新增的每個索引,都會重複此階段。

  • stage/innodb/alter table (插入):對於 ALTER TABLE 操作新增的每個索引,都會重複此階段。

  • stage/innodb/alter table (記錄套用索引):此階段包括在 ALTER TABLE 執行時產生的 DML 記錄套用。

  • stage/innodb/alter table (刷新):在此階段開始之前,會根據刷新清單的長度,使用更準確的估計值更新 WORK_ESTIMATED

  • stage/innodb/alter table (log apply table):此階段包含當 ALTER TABLE 執行時所產生的並行 DML 日誌的應用。此階段的持續時間取決於資料表變更的程度。如果沒有在資料表上執行並行 DML,則此階段是即時的。

  • stage/innodb/alter table (end):包含在刷新階段之後出現的任何剩餘工作,例如重新應用當 ALTER TABLE 執行時在資料表上執行的 DML。

注意

InnoDB ALTER TABLE 階段事件目前不考慮加入空間索引。

使用 Performance Schema 的 ALTER TABLE 監控範例

以下範例示範如何啟用 stage/innodb/alter table% 階段事件儀器和相關的消費者表格,以監控 ALTER TABLE 的進度。有關 Performance Schema 階段事件儀器和相關消費者的資訊,請參閱第 29.12.5 節,「Performance Schema 階段事件表格」

  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_historyevents_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 操作。在此範例中,將一個 middle_name 資料行加入到員工範例資料庫的 employees 資料表。

    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. 透過查詢 Performance Schema 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。