文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  使用效能綱要監控 InnoDB 表格的 ALTER TABLE 進度

17.16.1 使用效能綱要監控 InnoDB 表格的 ALTER TABLE 進度

您可以使用效能綱要來監控 InnoDB 表格的 ALTER TABLE 進度。

有七個階段事件代表 ALTER TABLE 的不同階段。ALTER TABLE 的每個階段事件都會報告 WORK_COMPLETEDWORK_ESTIMATED 的執行總計,因為它會通過其不同階段。WORK_ESTIMATED 是使用一個公式計算的,該公式會考慮 ALTER TABLE 執行的所有工作,並且可以在 ALTER TABLE 處理期間進行修訂。WORK_COMPLETEDWORK_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 的進度。有關效能架構階段事件工具和相關消費者的資訊,請參閱 第 29.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_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 作業。在此範例中,會在 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。