文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 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 參考手冊  /  ...  /  Performance Schema 階段事件表

29.12.5 Performance Schema 階段事件表

Performance Schema 會監測階段,這些階段是陳述式執行過程中的步驟,例如剖析陳述式、開啟表格或執行 filesort 作業。階段對應於 SHOW PROCESSLIST 所顯示的執行緒狀態,或在 Information Schema PROCESSLIST 表格中可見的狀態。當狀態值變更時,階段會開始和結束。

在事件階層中,等候事件會巢狀於階段事件內,階段事件會巢狀於陳述式事件內,陳述式事件會巢狀於交易事件內。

這些表格會儲存階段事件

以下章節將說明階段事件表格。也有摘要表格會彙總關於階段事件的資訊;請參閱章節 29.12.20.2,「階段摘要表格」

如需關於三個階段事件表格之間關聯的詳細資訊,請參閱章節 29.9,「Performance Schema 目前和歷史事件的表格」

設定階段事件收集

若要控制是否收集階段事件,請設定相關儀器和消費者的狀態

  • setup_instruments 表格包含名稱開頭為 stage 的儀器。使用這些儀器來啟用或停用個別階段事件類別的收集。

  • setup_consumers 表格包含消費者值,其名稱對應於目前和歷史階段事件表格名稱。使用這些消費者來篩選階段事件的收集。

除了提供陳述式進度資訊的那些儀器外,預設會停用階段儀器。例如

mysql> SELECT NAME, ENABLED, TIMED
       FROM performance_schema.setup_instruments
       WHERE NAME RLIKE 'stage/sql/[a-c]';
+----------------------------------------------------+---------+-------+
| NAME                                               | ENABLED | TIMED |
+----------------------------------------------------+---------+-------+
| stage/sql/After create                             | NO      | NO    |
| stage/sql/allocating local table                   | NO      | NO    |
| stage/sql/altering table                           | NO      | NO    |
| stage/sql/committing alter table to storage engine | NO      | NO    |
| stage/sql/Changing master                          | NO      | NO    |
| stage/sql/Checking master version                  | NO      | NO    |
| stage/sql/checking permissions                     | NO      | NO    |
| stage/sql/cleaning up                              | NO      | NO    |
| stage/sql/closing tables                           | NO      | NO    |
| stage/sql/Connecting to master                     | NO      | NO    |
| stage/sql/converting HEAP to MyISAM                | NO      | NO    |
| stage/sql/Copying to group table                   | NO      | NO    |
| stage/sql/Copying to tmp table                     | NO      | NO    |
| stage/sql/copy to tmp table                        | NO      | NO    |
| stage/sql/Creating sort index                      | NO      | NO    |
| stage/sql/creating table                           | NO      | NO    |
| stage/sql/Creating tmp table                       | NO      | NO    |
+----------------------------------------------------+---------+-------+

提供陳述式進度資訊的階段事件儀器預設會啟用和計時

mysql> SELECT NAME, ENABLED, TIMED
       FROM performance_schema.setup_instruments
       WHERE ENABLED='YES' AND NAME LIKE "stage/%";
+------------------------------------------------------+---------+-------+
| NAME                                                 | ENABLED | TIMED |
+------------------------------------------------------+---------+-------+
| stage/sql/copy to tmp table                          | YES     | YES   |
| stage/sql/Applying batch of row changes (write)      | YES     | YES   |
| stage/sql/Applying batch of row changes (update)     | YES     | YES   |
| stage/sql/Applying batch of row changes (delete)     | YES     | YES   |
| stage/innodb/alter table (end)                       | YES     | YES   |
| stage/innodb/alter table (flush)                     | YES     | YES   |
| stage/innodb/alter table (insert)                    | YES     | YES   |
| stage/innodb/alter table (log apply index)           | YES     | YES   |
| stage/innodb/alter table (log apply table)           | YES     | YES   |
| stage/innodb/alter table (merge sort)                | YES     | YES   |
| stage/innodb/alter table (read PK and internal sort) | YES     | YES   |
| stage/innodb/buffer pool load                        | YES     | YES   |
| stage/innodb/clone (file copy)                       | YES     | YES   |
| stage/innodb/clone (redo copy)                       | YES     | YES   |
| stage/innodb/clone (page copy)                       | YES     | YES   |
+------------------------------------------------------+---------+-------+

預設會停用階段消費者

mysql> SELECT *
       FROM performance_schema.setup_consumers
       WHERE NAME LIKE 'events_stages%';
+----------------------------+---------+
| NAME                       | ENABLED |
+----------------------------+---------+
| events_stages_current      | NO      |
| events_stages_history      | NO      |
| events_stages_history_long | NO      |
+----------------------------+---------+

若要在伺服器啟動時控制階段事件收集,請在您的 my.cnf 檔案中使用如下所示的行

  • 啟用

    [mysqld]
    performance-schema-instrument='stage/%=ON'
    performance-schema-consumer-events-stages-current=ON
    performance-schema-consumer-events-stages-history=ON
    performance-schema-consumer-events-stages-history-long=ON
  • 停用

    [mysqld]
    performance-schema-instrument='stage/%=OFF'
    performance-schema-consumer-events-stages-current=OFF
    performance-schema-consumer-events-stages-history=OFF
    performance-schema-consumer-events-stages-history-long=OFF

若要在執行階段控制階段事件收集,請更新 setup_instrumentssetup_consumers 表格

  • 啟用

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'YES', TIMED = 'YES'
    WHERE NAME LIKE 'stage/%';
    
    UPDATE performance_schema.setup_consumers
    SET ENABLED = 'YES'
    WHERE NAME LIKE 'events_stages%';
  • 停用

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'NO', TIMED = 'NO'
    WHERE NAME LIKE 'stage/%';
    
    UPDATE performance_schema.setup_consumers
    SET ENABLED = 'NO'
    WHERE NAME LIKE 'events_stages%';

若要僅收集特定階段事件,請僅啟用對應的階段儀器。若要僅為特定階段事件表格收集階段事件,請啟用階段儀器,但僅啟用對應於所需表格的階段消費者。

如需關於設定事件收集的其他資訊,請參閱章節 29.3,「Performance Schema 啟動組態」,以及章節 29.4,「Performance Schema 執行階段組態」

階段事件進度資訊

效能結構描述的階段事件表格包含兩個欄位,兩者結合起來可以為每一列提供階段進度指示器

  • WORK_COMPLETED:階段已完成的工作單元數量

  • WORK_ESTIMATED:階段預期完成的工作單元數量

如果沒有為儀器提供任何進度資訊,則每個欄位都為 NULL。如果資訊可用,則對資訊的解釋完全取決於儀器的實作。效能結構描述表格提供一個容器來儲存進度資料,但不會對度量本身的語意做出任何假設

  • 工作單元」是一個整數度量,在執行期間會隨著時間增加,例如處理的位元組、列、檔案或表格的數量。特定儀器的「工作單元」的定義留給提供資料的儀器程式碼。

  • WORK_COMPLETED 值可以一次增加一個或多個單位,具體取決於儀器化的程式碼。

  • WORK_ESTIMATED 值可以在階段期間變更,具體取決於儀器化的程式碼。

階段事件進度指示器的儀器化可以實作下列任何一種行為

  • 無進度儀器化

    這是最典型的情況,其中不提供任何進度資料。WORK_COMPLETEDWORK_ESTIMATED 欄位都為 NULL

  • 無界限進度儀器化

    只有 WORK_COMPLETED 欄位有意義。不提供 WORK_ESTIMATED 欄位的資料,其顯示為 0。

    透過查詢受監控工作階段的 events_stages_current 表格,監控應用程式可以報告到目前為止已完成多少工作,但無法報告階段是否接近完成。目前,沒有任何階段以這種方式儀器化。

  • 有界限進度儀器化

    WORK_COMPLETEDWORK_ESTIMATED 欄位都有意義。

    這種進度指示器適用於具有定義完成條件的操作,例如稍後描述的表格複製儀器。透過查詢受監控工作階段的 events_stages_current 表格,監控應用程式可以報告到目前為止已完成多少工作,並且可以透過計算 WORK_COMPLETED / WORK_ESTIMATED 比率來報告階段的整體完成百分比。

stage/sql/copy to tmp table 儀器說明了進度指示器如何運作。在執行 ALTER TABLE 陳述式期間,會使用 stage/sql/copy to tmp table 階段,而這個階段可能會執行很長的時間,具體取決於要複製的資料大小。

表格複製任務具有定義的終止條件(所有列都已複製),並且 stage/sql/copy to tmp table 階段已儀器化以提供有界限的進度資訊:使用的工作單元是複製的列數,WORK_COMPLETEDWORK_ESTIMATED 都有意義,它們的比率表示任務完成百分比。

若要啟用儀器和相關的取用者,請執行這些陳述式

UPDATE performance_schema.setup_instruments
SET ENABLED='YES'
WHERE NAME='stage/sql/copy to tmp table';

UPDATE performance_schema.setup_consumers
SET ENABLED='YES'
WHERE NAME LIKE 'events_stages_%';

若要查看正在進行的 ALTER TABLE 陳述式的進度,請從 events_stages_current 表格中選取。