文件首頁
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


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 儀器命名慣例」中所述。從執行檢測產生的事件具有從檢測 NAME 值取得的 EVENT_NAME 值。(事件實際上沒有「名稱」,但這提供了一種將事件與檢測相關聯的方式。)

  • ENABLED

    檢測是否啟用。值為 YESNO。停用的檢測不會產生任何事件。可以修改此資料行,不過設定 ENABLED 對於已建立的檢測沒有任何作用。

  • TIMED

    檢測是否計時。值為 YESNONULL。可以修改此資料行,不過設定 TIMED 對於已建立的檢測沒有任何作用。

    TIMED 值為 NULL 表示檢測不支援計時。例如,記憶體作業未計時,因此其 TIMED 資料行是 NULL

    將支援計時的檢測之 TIMED 設定為 NULL 無效,將不支援計時的檢測之 TIMED 設定為非 NULL 也無效。

    如果已啟用的檢測未計時,則會啟用檢測程式碼,但不會啟用計時器。檢測產生的事件,其 TIMER_STARTTIMER_ENDTIMER_WAIT 計時器值為 NULL。這又會導致在計算摘要表格中的總和、最小值、最大值和平均時間值時忽略這些值。

  • PROPERTIES

    檢測屬性。此資料行使用 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 資料行純粹是資訊性的,旨在向使用者(以及 Performance Schema 程式碼)提供一些關於儀器執行時行為的提示。

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

    例如,wait/synch/mutex/pfs/LOCK_pfs_share_list 互斥鎖被定義為變動性 1,這表示它會建立一次。儀器本身可能產生的額外負擔(即互斥鎖初始化)對此儀器沒有影響。執行時的額外負擔僅在鎖定或解除鎖定互斥鎖時發生。

    變動性索引較高的儀器(例如 SESSION = 5)會為每個使用者連線建立和銷毀。例如,wait/synch/mutex/sql/THD::LOCK_query_plan 互斥鎖會在每次連線時建立,並在連線中斷時銷毀。

    此互斥鎖對 Performance Schema 的額外負擔更加敏感,因為額外負擔不僅來自鎖定和解除鎖定儀器,還來自互斥鎖建立和銷毀儀器,這些儀器會更頻繁地執行。

    變動性的另一個面向涉及對 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)

TRUNCATE TABLE 不允許用於 setup_instruments 表格。

為了協助監控和疑難排解,Performance Schema 儀器會用於將儀器化執行緒的名稱匯出到作業系統。這讓顯示執行緒名稱的公用程式(例如偵錯工具和 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