文件首頁
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 參考手冊  /  ...  /  效能架構階段事件表格

29.12.5 效能架構階段事件表格

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

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

這些表格會儲存階段事件

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

如需關於三個階段事件表格之間關係的詳細資訊,請參閱第 29.9 節,「用於目前和歷史事件的效能架構表格」

設定階段事件收集

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

  • 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 節「效能架構啟動設定」第 29.4 節「效能架構執行階段設定」

階段事件進度資訊

效能架構階段事件表格包含兩個欄位,它們加總起來可為每一列提供階段進度指示器

  • 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表格中選取。