threads 表格包含每個伺服器執行緒的資料列。每個資料列都包含關於執行緒的資訊,並指示是否為其啟用監控。若要讓 Performance Schema 監控執行緒,必須符合以下條件
setup_consumers表格中的thread_instrumentation消費者必須為YES。threads.INSTRUMENTED資料行必須為YES。僅針對在
setup_instruments表格中啟用的儀器產生的執行緒事件進行監控。
threads 表格也會指示每個伺服器執行緒是否要執行歷史事件記錄。這包含等待、階段、陳述式和交易事件,並會影響記錄到這些表格
events_waits_history
events_waits_history_long
events_stages_history
events_stages_history_long
events_statements_history
events_statements_history_long
events_transactions_history
events_transactions_history_long若要進行歷史事件記錄,必須符合以下條件
setup_consumers表格中適當的歷史相關消費者必須啟用。例如,在events_waits_history和events_waits_history_long表格中記錄等待事件,需要對應的events_waits_history和events_waits_history_long消費者為YES。threads.HISTORY資料行必須為YES。僅針對在
setup_instruments表格中啟用的儀器產生的執行緒事件進行記錄。
對於前台執行緒(來自客戶端連線),threads 資料表中列的 INSTRUMENTED 和 HISTORY 欄位的初始值,取決於與執行緒相關聯的使用者帳戶是否與 setup_actors 資料表中的任何列匹配。這些值來自匹配的 setup_actors 資料表列的 ENABLED 和 HISTORY 欄位。
對於背景執行緒,沒有相關聯的使用者。INSTRUMENTED 和 HISTORY 預設為 YES,並且不會參考 setup_actors。
初始的 setup_actors 內容如下所示
mysql> SELECT * FROM performance_schema.setup_actors;
+------+------+------+---------+---------+
| HOST | USER | ROLE | ENABLED | HISTORY |
+------+------+------+---------+---------+
| % | % | % | YES | YES |
+------+------+------+---------+---------+HOST 和 USER 欄位應包含文字主機名稱或使用者名稱,或 '%' 以匹配任何名稱。
ENABLED 和 HISTORY 欄位表示是否啟用匹配執行緒的檢測和歷史事件日誌記錄,受先前描述的其他條件約束。
當 Performance Schema 檢查 setup_actors 中每個新前台執行緒的匹配項時,它會先嘗試使用 USER 和 HOST 欄位尋找更精確的匹配項(ROLE 未使用)。
具有
USER='和literal'HOST='的列。literal'具有
USER='和literal'HOST='%'的列。具有
USER='%'和HOST='的列。literal'具有
USER='%'和HOST='%'的列。
匹配發生的順序很重要,因為不同的匹配 setup_actors 列可以具有不同的 USER 和 HOST 值。這使得能夠根據 ENABLED 和 HISTORY 欄位值,按主機、使用者或帳戶(使用者和主機組合)選擇性地應用檢測和歷史事件日誌記錄。
當最佳匹配的列的
ENABLED=YES時,執行緒的INSTRUMENTED值變為YES。當最佳匹配的列的HISTORY=YES時,執行緒的HISTORY值變為YES。當最佳匹配的列的
ENABLED=NO時,執行緒的INSTRUMENTED值變為NO。當最佳匹配的列的HISTORY=NO時,執行緒的HISTORY值變為NO。當未找到匹配項時,執行緒的
INSTRUMENTED和HISTORY值變為NO。
setup_actors 資料表列中的 ENABLED 和 HISTORY 欄位可以彼此獨立地設定為 YES 或 NO。這表示您可以獨立於是否收集歷史事件來啟用檢測。
預設情況下,監控和歷史事件收集會為所有新的前台執行緒啟用,因為 setup_actors 資料表最初包含一個 HOST 和 USER 皆為 '%' 的列。若要執行更有限的匹配,例如僅針對某些前台執行緒啟用監控,您必須變更此列(因為它會匹配任何連線),並為更特定的 HOST/USER 組合新增列。
假設您修改 setup_actors 如下
UPDATE performance_schema.setup_actors
SET ENABLED = 'NO', HISTORY = 'NO'
WHERE HOST = '%' AND USER = '%';
INSERT INTO performance_schema.setup_actors
(HOST,USER,ROLE,ENABLED,HISTORY)
VALUES('localhost','joe','%','YES','YES');
INSERT INTO performance_schema.setup_actors
(HOST,USER,ROLE,ENABLED,HISTORY)
VALUES('hosta.example.com','joe','%','YES','NO');
INSERT INTO performance_schema.setup_actors
(HOST,USER,ROLE,ENABLED,HISTORY)
VALUES('%','sam','%','NO','YES');UPDATE 語句變更預設匹配,以停用檢測和歷史事件收集。INSERT 語句會為更特定的匹配新增列。
現在,Performance Schema 決定如何為新的連線執行緒設定 INSTRUMENTED 和 HISTORY 值,如下所示
如果
joe從本機主機連線,則連線會與第一個插入的列匹配。執行緒的INSTRUMENTED和HISTORY值變為YES。如果
joe從hosta.example.com連線,則連線會與第二個插入的列匹配。執行緒的INSTRUMENTED值變為YES,而HISTORY值變為NO。如果
joe從任何其他主機連線,則沒有匹配項。執行緒的INSTRUMENTED和HISTORY值變為NO。如果
sam從任何主機連線,則連線會與第三個插入的列匹配。執行緒的INSTRUMENTED值變為NO,而HISTORY值變為YES。對於任何其他連線,
HOST和USER設定為'%'的列會匹配。此列現在的ENABLED和HISTORY設定為NO,因此執行緒的INSTRUMENTED和HISTORY值變為NO。
對 setup_actors 資料表的修改只會影響修改後建立的前台執行緒,而不會影響現有的執行緒。若要影響現有的執行緒,請修改 threads 資料表列的 INSTRUMENTED 和 HISTORY 欄位。