文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 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.4.6 依執行緒預先篩選

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_historyevents_waits_history_long 表格中的等待事件記錄需要對應的 events_waits_historyevents_waits_history_long 消費者為 YES

  • threads.HISTORY 欄位必須為 YES

  • 記錄僅針對從 setup_instruments 表格中已啟用的儀器所產生的執行緒事件發生。

對於前台執行緒(來自客戶端連線),threads 資料表中,INSTRUMENTEDHISTORY 欄位的初始值,取決於與執行緒相關聯的使用者帳戶是否與 setup_actors 資料表中的任何列相符。這些值來自相符的 setup_actors 資料表列的 ENABLEDHISTORY 欄位。

對於背景執行緒,沒有相關聯的使用者。INSTRUMENTEDHISTORY 預設為 YES,且不會參考 setup_actors

初始的 setup_actors 內容如下所示

mysql> SELECT * FROM performance_schema.setup_actors;
+------+------+------+---------+---------+
| HOST | USER | ROLE | ENABLED | HISTORY |
+------+------+------+---------+---------+
| %    | %    | %    | YES     | YES     |
+------+------+------+---------+---------+

HOSTUSER 欄位應包含字面主機或使用者名稱,或使用 '%' 來匹配任何名稱。

ENABLEDHISTORY 欄位表示是否為符合條件的執行緒啟用檢測和歷史事件記錄,但仍須遵守先前描述的其他條件。

當 Performance Schema 檢查 setup_actors 中每個新前台執行緒的匹配項時,它會先嘗試使用 USERHOST 欄位(ROLE 未使用)尋找更精確的匹配項。

  • 具有 USER='literal'HOST='literal' 的列。

  • 具有 USER='literal'HOST='%' 的列。

  • 具有 USER='%'HOST='literal' 的列。

  • 具有 USER='%'HOST='%' 的列。

匹配發生的順序很重要,因為不同的匹配 setup_actors 列可能具有不同的 USERHOST 值。這使得可以根據 ENABLEDHISTORY 欄位的值,選擇性地針對每個主機、使用者或帳戶(使用者和主機組合)套用檢測和歷史事件記錄。

  • 當最佳匹配的列具有 ENABLED=YES 時,執行緒的 INSTRUMENTED 值會變為 YES。當最佳匹配的列具有 HISTORY=YES 時,執行緒的 HISTORY 值會變為 YES

  • 當最佳匹配的列具有 ENABLED=NO 時,執行緒的 INSTRUMENTED 值會變為 NO。當最佳匹配的列具有 HISTORY=NO 時,執行緒的 HISTORY 值會變為 NO

  • 如果沒有找到匹配項,執行緒的 INSTRUMENTEDHISTORY 值會變為 NO

setup_actors 列中的 ENABLEDHISTORY 欄位可以彼此獨立地設定為 YESNO。這表示您可以獨立於是否收集歷史事件來啟用檢測。

預設情況下,所有新的前台執行緒都會啟用監控和歷史事件收集,因為 setup_actors 資料表最初包含一個 HOSTUSER 皆為 '%' 的列。若要執行更有限的匹配,例如僅為某些前台執行緒啟用監控,您必須變更此列(因為它會匹配任何連線),並針對更特定的 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 決定如何為新的連線執行緒設定 INSTRUMENTEDHISTORY 值,如下所示

  • 如果 joe 從本機主機連線,則該連線會匹配第一個插入的列。執行緒的 INSTRUMENTEDHISTORY 值會變為 YES

  • 如果 joehosta.example.com 連線,則該連線會匹配第二個插入的列。執行緒的 INSTRUMENTED 值會變為 YES,而 HISTORY 值會變為 NO

  • 如果 joe 從任何其他主機連線,則沒有匹配項。執行緒的 INSTRUMENTEDHISTORY 值會變為 NO

  • 如果 sam 從任何主機連線,則該連線會匹配第三個插入的列。執行緒的 INSTRUMENTED 值會變為 NO,而 HISTORY 值會變為 YES

  • 對於任何其他連線,HOSTUSER 設定為 '%' 的列會匹配。此列現在的 ENABLEDHISTORY 設定為 NO,因此執行緒的 INSTRUMENTEDHISTORY 值會變為 NO

setup_actors 資料表的修改僅影響修改後建立的前台執行緒,而不影響現有的執行緒。若要影響現有的執行緒,請修改 threads 資料表列的 INSTRUMENTEDHISTORY 欄位。