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