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 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
。