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


29.12.2.3 setup_instruments 表

setup_instruments 表格會列出可以收集事件的檢測物件類別。

mysql> SELECT * FROM performance_schema.setup_instruments\G
*************************** 1. row ***************************
         NAME: wait/synch/mutex/pfs/LOCK_pfs_share_list
      ENABLED: NO
        TIMED: NO
   PROPERTIES: singleton
        FLAGS: NULL
   VOLATILITY: 1
DOCUMENTATION: Components can provide their own performance_schema tables. 
This lock protects the list of such tables definitions.
...
*************************** 410. row ***************************
         NAME: stage/sql/executing
      ENABLED: NO
        TIMED: NO
   PROPERTIES:
        FLAGS: NULL
   VOLATILITY: 0
DOCUMENTATION: NULL
...
*************************** 733. row ***************************
         NAME: statement/abstract/Query
      ENABLED: YES
        TIMED: YES
   PROPERTIES: mutable
        FLAGS: NULL
   VOLATILITY: 0
DOCUMENTATION: SQL query just received from the network. 
At this point, the real statement type is unknown, the type 
will be refined after SQL parsing.
...
*************************** 737. row ***************************
         NAME: memory/performance_schema/mutex_instances
      ENABLED: YES
        TIMED: NULL
   PROPERTIES: global_statistics
        FLAGS:
   VOLATILITY: 1
DOCUMENTATION: Memory used for table performance_schema.mutex_instances
...
*************************** 823. row ***************************
         NAME: memory/sql/Prepared_statement::infrastructure
      ENABLED: YES
        TIMED: NULL
   PROPERTIES: controlled_by_default
        FLAGS: controlled
   VOLATILITY: 0
DOCUMENTATION: Map infrastructure for prepared statements per session.
...

即使檢測的程式碼沒有執行,新增至原始程式碼的每個儀器都會為 setup_instruments 表格提供一個資料列。當儀器啟用並執行時,會建立檢測的執行個體,這些執行個體在 xxx_instances 表格中可見,例如 file_instancesrwlock_instances

對大多數 setup_instruments 資料列的修改會立即影響監控。對於某些儀器,修改僅在伺服器啟動時生效;在執行階段變更它們沒有任何作用。這主要影響伺服器中的互斥鎖、條件變數和讀寫鎖,雖然可能還有其他儀器是這樣的情況。

如需關於 setup_instruments 表格在事件篩選中的作用的詳細資訊,請參閱 第 29.4.3 節,「事件預先篩選」

setup_instruments 表格包含這些欄位:

  • NAME

    儀器名稱。儀器名稱可能有多個部分,並形成一個階層,如第 29.6 節,「Performance Schema 儀器命名慣例」中所述。從儀器的執行產生的事件具有一個 EVENT_NAME 值,該值取自儀器的 NAME 值。(事件實際上沒有「名稱」,但這提供了一種將事件與儀器關聯的方法。)

  • ENABLED

    儀器是否啟用。值為 YESNO。停用的儀器不會產生任何事件。此欄位可以修改,雖然設定 ENABLED 對於已建立的儀器沒有任何作用。

  • TIMED

    儀器是否計時。值為 YESNONULL。此欄位可以修改,雖然設定 TIMED 對於已建立的儀器沒有任何作用。

    TIMEDNULL 值表示儀器不支援計時。例如,記憶體操作沒有計時,因此它們的 TIMED 欄位為 NULL

    對於支援計時的工具,將 TIMED 設定為 NULL 不會產生任何效果;同樣地,對於不支援計時的工具,將 TIMED 設定為非 NULL 也沒有效果。

    如果啟用的工具沒有計時,則工具程式碼會啟用,但計時器不會。工具產生的事件的 TIMER_STARTTIMER_ENDTIMER_WAIT 計時器值為 NULL。這反過來會導致在計算摘要表格中的總和、最小值、最大值和平均時間值時忽略這些值。

  • 屬性

    工具的屬性。此欄使用 SET 資料類型,因此每個工具可以設定來自下列清單的多個旗標。

    • controlled_by_default:預設情況下,此工具會收集記憶體。

    • global_statistics:此工具僅產生全域摘要。無法取得更精細層級(例如每個執行緒、帳戶、使用者或主機)的摘要。例如,大多數記憶體工具僅產生全域摘要。

    • mutable:此工具可以「「變異」」為更具體的工具。此屬性僅適用於陳述式工具。

    • progress:此工具能夠報告進度資料。此屬性僅適用於階段工具。

    • singleton:此工具只有一個執行個體。例如,伺服器中的大多數全域互斥鎖都是單例,因此對應的工具也是如此。

    • user:此工具直接與使用者工作負載相關(相對於系統工作負載)。其中一個工具是 wait/io/socket/sql/client_connection

  • 旗標

    是否控制工具的記憶體。

    此旗標僅適用於非全域記憶體工具,並且可以設定或取消設定。例如

                  SQL> UPDATE PERFORMANCE_SCHEMA.SETUP_INTRUMENTS SET FLAGS="controlled" WHERE NAME='memory/sql/NET::buff';
    注意

    嘗試在非記憶體工具或全域記憶體工具上設定 FLAGS = controlled 會靜默失敗。

  • 揮發性

    工具的揮發性。揮發性值範圍從低到高。這些值對應於 mysql/psi/psi_base.h 標頭檔中定義的 PSI_VOLATILITY_xxx 常數。

    #define PSI_VOLATILITY_UNKNOWN 0
    #define PSI_VOLATILITY_PERMANENT 1
    #define PSI_VOLATILITY_PROVISIONING 2
    #define PSI_VOLATILITY_DDL 3
    #define PSI_VOLATILITY_CACHE 4
    #define PSI_VOLATILITY_SESSION 5
    #define PSI_VOLATILITY_TRANSACTION 6
    #define PSI_VOLATILITY_QUERY 7
    #define PSI_VOLATILITY_INTRA_QUERY 8

    VOLATILITY 欄位純粹是資訊性的,旨在為使用者(和效能結構描述程式碼)提供有關工具執行階段行為的一些提示。

    具有低揮發性索引 (PERMANENT = 1) 的工具會在伺服器啟動時建立一次,並且在伺服器正常運作期間永遠不會銷毀或重新建立。它們僅在伺服器關閉期間銷毀。

    例如,wait/synch/mutex/pfs/LOCK_pfs_share_list 互斥鎖定義的揮發性為 1,這表示它只建立一次。因此,工具本身的可能額外負荷(即互斥鎖初始化)對此工具沒有影響。執行階段額外負荷僅在鎖定或解除鎖定互斥鎖時才會發生。

    具有較高揮發性索引(例如,SESSION = 5)的工具會針對每個使用者工作階段建立和銷毀。例如,每次工作階段連線時都會建立 wait/synch/mutex/sql/THD::LOCK_query_plan 互斥鎖,並在工作階段斷線時銷毀。

    此互斥鎖對效能結構描述額外負荷更敏感,因為額外負荷不僅來自鎖定和解除鎖定工具,還來自互斥鎖建立和銷毀工具,這些工具會更頻繁地執行。

    揮發性的另一個方面是,何時以及何時更新 ENABLED 欄位實際上會產生一些效果。

    • 更新 ENABLED 會影響後續建立的工具化物件,但對已建立的工具沒有影響。

    • 更「「揮發性」」的工具會更快使用 setup_instruments 表格中的新設定。

    例如,此陳述式不會影響現有工作階段的 LOCK_query_plan 互斥鎖,但會影響在更新後建立的新工作階段。

    UPDATE performance_schema.setup_instruments
    SET ENABLED=value
    WHERE NAME = 'wait/synch/mutex/sql/THD::LOCK_query_plan';

    此陳述式實際上完全沒有效果。

    UPDATE performance_schema.setup_instruments
    SET ENABLED=value
    WHERE NAME = 'wait/synch/mutex/pfs/LOCK_pfs_share_list';

    此互斥鎖是永久的,並且已在執行更新之前建立。互斥鎖永遠不會再次建立,因此永遠不會使用 setup_instruments 中的 ENABLED 值。若要啟用或停用此互斥鎖,請改用 mutex_instances 表格。

  • 文件

    描述工具用途的字串。如果沒有可用的描述,則值為 NULL

setup_instruments 表格具有以下索引

  • 主鍵位於 (NAME)

不允許對 setup_instruments 表格使用 TRUNCATE TABLE

為了協助監控和疑難排解,效能結構描述工具會用於將工具化執行緒的名稱匯出到作業系統。這使得顯示執行緒名稱的公用程式(例如偵錯工具和 Unix ps 命令)能夠顯示不同的 mysqld 執行緒名稱,而不是「「mysqld」」。此功能僅在 Linux、macOS 和 Windows 上受支援。

假設 mysqld 正在具有支援此調用語法的 ps 版本的系統上執行

ps -C mysqld H -o "pid tid cmd comm"

在未將執行緒名稱匯出到作業系統的情況下,該命令會顯示如下輸出,其中大多數 COMMAND 值為 mysqld

  PID   TID CMD                         COMMAND
 1377  1377 /usr/sbin/mysqld            mysqld
 1377  1528 /usr/sbin/mysqld            mysqld
 1377  1529 /usr/sbin/mysqld            mysqld
 1377  1530 /usr/sbin/mysqld            mysqld
 1377  1531 /usr/sbin/mysqld            mysqld
 1377  1534 /usr/sbin/mysqld            mysqld
 1377  1535 /usr/sbin/mysqld            mysqld
 1377  1588 /usr/sbin/mysqld            xpl_worker1
 1377  1589 /usr/sbin/mysqld            xpl_worker0
 1377  1590 /usr/sbin/mysqld            mysqld
 1377  1594 /usr/sbin/mysqld            mysqld
 1377  1595 /usr/sbin/mysqld            mysqld

在將執行緒名稱匯出到作業系統的情況下,輸出看起來像這樣,其中執行緒的名稱與其工具名稱類似

  PID   TID CMD                         COMMAND
27668 27668 /usr/sbin/mysqld            mysqld
27668 27671 /usr/sbin/mysqld            ib_io_ibuf
27668 27672 /usr/sbin/mysqld            ib_io_log
27668 27673 /usr/sbin/mysqld            ib_io_rd-1
27668 27674 /usr/sbin/mysqld            ib_io_rd-2
27668 27677 /usr/sbin/mysqld            ib_io_wr-1
27668 27678 /usr/sbin/mysqld            ib_io_wr-2
27668 27699 /usr/sbin/mysqld            xpl_worker-2
27668 27700 /usr/sbin/mysqld            xpl_accept-1
27668 27710 /usr/sbin/mysqld            evt_sched
27668 27711 /usr/sbin/mysqld            sig_handler
27668 27933 /usr/sbin/mysqld            connection

同一類別中的不同執行緒執行個體會編號,以便在可行時提供不同的名稱。由於名稱長度在潛在的大量連線方面存在限制,因此連線會簡單地命名為 connection