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_instancesfile_instances 或 rwlock_instances。
對大多數 setup_instruments 資料列的修改會立即影響監控。對於某些儀器,修改僅在伺服器啟動時生效;在執行階段變更它們沒有任何作用。這主要影響伺服器中的互斥鎖、條件變數和讀寫鎖,雖然可能還有其他儀器是這樣的情況。
如需關於 setup_instruments 表格在事件篩選中的作用的詳細資訊,請參閱 第 29.4.3 節,「事件預先篩選」。
setup_instruments 表格包含這些欄位:
NAME儀器名稱。儀器名稱可能有多個部分,並形成一個階層,如第 29.6 節,「Performance Schema 儀器命名慣例」中所述。從儀器的執行產生的事件具有一個
EVENT_NAME值,該值取自儀器的NAME值。(事件實際上沒有「名稱」,但這提供了一種將事件與儀器關聯的方法。)ENABLED儀器是否啟用。值為
YES或NO。停用的儀器不會產生任何事件。此欄位可以修改,雖然設定ENABLED對於已建立的儀器沒有任何作用。TIMED儀器是否計時。值為
YES、NO或NULL。此欄位可以修改,雖然設定TIMED對於已建立的儀器沒有任何作用。TIMED的NULL值表示儀器不支援計時。例如,記憶體操作沒有計時,因此它們的TIMED欄位為NULL。對於支援計時的工具,將
TIMED設定為NULL不會產生任何效果;同樣地,對於不支援計時的工具,將TIMED設定為非NULL也沒有效果。如果啟用的工具沒有計時,則工具程式碼會啟用,但計時器不會。工具產生的事件的
TIMER_START、TIMER_END和TIMER_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 8VOLATILITY欄位純粹是資訊性的,旨在為使用者(和效能結構描述程式碼)提供有關工具執行階段行為的一些提示。具有低揮發性索引 (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。