threads 表格包含每個伺服器執行緒的一列。每一列都包含有關執行緒的資訊,並指示是否為其啟用監控和歷史事件記錄。
mysql> SELECT * FROM performance_schema.threads\G
*************************** 1. row ***************************
THREAD_ID: 1
NAME: thread/sql/main
TYPE: BACKGROUND
PROCESSLIST_ID: NULL
PROCESSLIST_USER: NULL
PROCESSLIST_HOST: NULL
PROCESSLIST_DB: mysql
PROCESSLIST_COMMAND: NULL
PROCESSLIST_TIME: 418094
PROCESSLIST_STATE: NULL
PROCESSLIST_INFO: NULL
PARENT_THREAD_ID: NULL
ROLE: NULL
INSTRUMENTED: YES
HISTORY: YES
CONNECTION_TYPE: NULL
THREAD_OS_ID: 5856
RESOURCE_GROUP: SYS_default
EXECUTION_ENGINE: PRIMARY
CONTROLLED_MEMORY: 1456
MAX_CONTROLLED_MEMORY: 67480
TOTAL_MEMORY: 1270430
MAX_TOTAL_MEMORY: 1307317
TELEMETRY_ACTIVE: NO
...當 Performance Schema 初始化時,它會根據當時存在的執行緒來填入 threads 表格。此後,每次伺服器建立執行緒時都會新增一列。
新執行緒的 INSTRUMENTED 和 HISTORY 資料行值由 setup_actors 表格的內容決定。有關如何使用 setup_actors 表格來控制這些資料行的資訊,請參閱第 29.4.6 節,「依執行緒預先篩選」。
當執行緒結束時,會從 threads 表格中移除列。對於與用戶端工作階段相關聯的執行緒,當工作階段結束時會發生移除。如果用戶端已啟用自動重新連線,且工作階段在斷線後重新連線,則工作階段會與 threads 表格中的新列相關聯,該列具有不同的 PROCESSLIST_ID 值。新執行緒的初始 INSTRUMENTED 和 HISTORY 值可能與原始執行緒不同:setup_actors 表格可能在此期間已變更,而且如果原始執行緒的 INSTRUMENTED 或 HISTORY 值在列初始化後已變更,則變更不會傳遞到新執行緒。
您可以啟用或停用執行緒監控(也就是說,執行緒執行的事件是否經過儀器化)和歷史事件記錄。若要控制新前景執行緒的初始 INSTRUMENTED 和 HISTORY 值,請使用 setup_actors 表格。若要控制現有執行緒的這些方面,請設定 threads 表格列的 INSTRUMENTED 和 HISTORY 資料行。(有關執行緒監控和歷史事件記錄發生的條件的詳細資訊,請參閱 INSTRUMENTED 和 HISTORY 資料行的描述。)
若要比較 threads 表格中具有 PROCESSLIST_ 前置詞名稱的資料行與其他程序資訊來源,請參閱程序資訊來源。
對於非 threads 表格的其他執行緒資訊來源,只有當目前使用者擁有 PROCESS 權限時,才會顯示其他使用者的執行緒資訊。但 threads 表格的情況並非如此;所有擁有該表格 SELECT 權限的使用者都可以看到所有列。不應該能夠透過存取 threads 表格來查看其他使用者執行緒的使用者,不應該被授予該表格的 SELECT 權限。
threads 表格具有以下欄位:
THREAD_ID唯一的執行緒識別碼。
NAME伺服器中與執行緒檢測程式碼相關聯的名稱。例如,
thread/sql/one_connection對應於程式碼中負責處理使用者連線的執行緒函式,而thread/sql/main代表伺服器的main()函式。TYPE執行緒類型,可以是
FOREGROUND或BACKGROUND。使用者連線執行緒是前景執行緒。與內部伺服器活動相關的執行緒是背景執行緒。例如,內部InnoDB執行緒、傳送資訊至複本的 「binlog dump」執行緒,以及複製 I/O 和 SQL 執行緒。PROCESSLIST_ID對於前景執行緒(與使用者連線相關聯),這是連線識別碼。這與
INFORMATION_SCHEMAPROCESSLIST表格的ID欄位中顯示的值相同,在SHOW PROCESSLIST輸出的Id欄位中顯示,並由執行緒內的CONNECTION_ID()函式傳回。對於背景執行緒(與使用者連線無關),
PROCESSLIST_ID為NULL,因此值不是唯一的。PROCESSLIST_USER與前景執行緒相關聯的使用者,背景執行緒則為
NULL。PROCESSLIST_HOST與前景執行緒相關聯的用戶端主機名稱,背景執行緒則為
NULL。與
INFORMATION_SCHEMAPROCESSLIST表格的HOST欄位或SHOW PROCESSLIST輸出的Host欄位不同,PROCESSLIST_HOST欄位不包含 TCP/IP 連線的連接埠號碼。若要從 Performance Schema 取得此資訊,請啟用 Socket 檢測(預設為未啟用),並檢查socket_instances表格。mysql> SELECT NAME, ENABLED, TIMED FROM performance_schema.setup_instruments WHERE NAME LIKE 'wait/io/socket%'; +----------------------------------------+---------+-------+ | NAME | ENABLED | TIMED | +----------------------------------------+---------+-------+ | wait/io/socket/sql/server_tcpip_socket | NO | NO | | wait/io/socket/sql/server_unix_socket | NO | NO | | wait/io/socket/sql/client_connection | NO | NO | +----------------------------------------+---------+-------+ 3 rows in set (0.01 sec) mysql> UPDATE performance_schema.setup_instruments SET ENABLED='YES' WHERE NAME LIKE 'wait/io/socket%'; Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql> SELECT * FROM performance_schema.socket_instances\G *************************** 1. row *************************** EVENT_NAME: wait/io/socket/sql/client_connection OBJECT_INSTANCE_BEGIN: 140612577298432 THREAD_ID: 31 SOCKET_ID: 53 IP: ::ffff:127.0.0.1 PORT: 55642 STATE: ACTIVE ...PROCESSLIST_DB執行緒的預設資料庫,如果沒有選取任何資料庫則為
NULL。PROCESSLIST_COMMAND對於前景執行緒,此欄位表示執行緒代表用戶端執行的命令類型,如果會期閒置則為
Sleep。如需執行緒命令的說明,請參閱第 10.14 節「檢查伺服器執行緒(處理序)資訊」。此欄位的值對應於用戶端/伺服器協定的COM_命令和xxxCom_狀態變數。請參閱第 7.1.10 節「伺服器狀態變數」。xxx背景執行緒不會代表用戶端執行命令,因此此欄位可能為
NULL。PROCESSLIST_TIME執行緒處於目前狀態的時間(以秒為單位)。對於複本 SQL 執行緒,此值是最後一個複製事件的時間戳記與複本主機實際時間之間經過的秒數。請參閱第 19.2.3 節「複製執行緒」。
PROCESSLIST_STATE表示執行緒正在執行的動作、事件或狀態。如需
PROCESSLIST_STATE值的說明,請參閱第 10.14 節「檢查伺服器執行緒(處理序)資訊」。如果值為NULL,則執行緒可能對應於閒置的用戶端會期,或者其正在進行的工作未以階段進行檢測。大多數狀態對應於非常快速的操作。如果執行緒在給定狀態下停留數秒,可能存在需要調查的問題。
PROCESSLIST_INFO執行緒正在執行的陳述式,如果未執行任何陳述式,則為
NULL。此陳述式可能是傳送至伺服器的陳述式,如果陳述式執行其他陳述式,則為最內層的陳述式。例如,如果CALL陳述式執行正在執行SELECT陳述式的預存程序,PROCESSLIST_INFO值會顯示SELECT陳述式。PARENT_THREAD_ID如果此執行緒是子執行緒(由另一個執行緒產生),則這是產生執行緒的
THREAD_ID值。ROLE未使用。
INSTRUMENTED執行緒執行的事件是否已檢測。值為
YES或NO。對於前景執行緒,初始
INSTRUMENTED值取決於與執行緒相關聯的使用者帳戶是否符合setup_actors表格中的任何列。比對是根據PROCESSLIST_USER和PROCESSLIST_HOST欄位的值。如果執行緒產生子執行緒,則會針對為子執行緒建立的
threads表格列再次進行比對。對於背景執行緒,預設情況下
INSTRUMENTED為YES。由於背景執行緒沒有相關聯的使用者,因此不會查詢setup_actors。對於任何執行緒,其
INSTRUMENTED值可以在執行緒的生命週期內變更。
若要發生執行緒執行的事件監控,必須符合以下條件:
setup_consumers表格中的thread_instrumentation消費者必須為YES。threads.INSTRUMENTED欄位必須為YES。監控只會針對在
setup_instruments表格中ENABLED欄位設定為YES的工具產生的執行緒事件發生。
HISTORY是否記錄執行緒的歷史事件。值為
YES或NO。對於前景執行緒,初始
HISTORY值取決於與執行緒相關聯的使用者帳戶是否符合setup_actors表格中的任何列。比對是根據PROCESSLIST_USER和PROCESSLIST_HOST欄位的值。如果執行緒產生子執行緒,則會針對為子執行緒建立的
threads表格列再次進行比對。對於背景執行緒,預設情況下
HISTORY為YES。由於背景執行緒沒有相關聯的使用者,因此不會查詢setup_actors。對於任何執行緒,其
HISTORY值可以在執行緒的生命週期內變更。
若要發生執行緒的歷史事件記錄,必須符合以下條件:
setup_consumers表格中適當的歷史相關消費者必須啟用。例如,events_waits_history和events_waits_history_long表格中的等待事件記錄需要將對應的events_waits_history和events_waits_history_long消費者設定為YES。threads.HISTORY欄位必須為YES。記錄只會針對在
setup_instruments表格中ENABLED欄位設定為YES的工具產生的執行緒事件發生。
CONNECTION_TYPE用於建立連線的協定,背景執行緒則為
NULL。允許的值包括TCP/IP(未加密建立的 TCP/IP 連線)、SSL/TLS(以加密建立的 TCP/IP 連線)、Socket(Unix Socket 檔案連線)、Named Pipe(Windows 具名管道連線)和Shared Memory(Windows 共享記憶體連線)。THREAD_OS_ID底層作業系統定義的執行緒或工作識別碼(如果有的話)
當 MySQL 執行緒在其生命週期內與相同的作業系統執行緒相關聯時,
THREAD_OS_ID包含作業系統執行緒 ID。當 MySQL 執行緒在其生命週期內未與相同的作業系統執行緒相關聯時,
THREAD_OS_ID包含NULL。當使用執行緒集區外掛程式時,使用者會期通常是這種情況(請參閱第 7.6.3 節「MySQL Enterprise 執行緒集區」)。
對於 Windows,
THREAD_OS_ID對應於 Process Explorer 中可見的執行緒 ID (https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)。對於 Linux,
THREAD_OS_ID對應於gettid()函式的值。例如,使用 perf 或 ps -L 命令,或在proc檔案系統 (/proc/) 中會公開此值。如需詳細資訊,請參閱[pid]/task/[tid]perf-stat(1)、ps(1)和proc(5)手冊頁。RESOURCE_GROUP資源群組標籤。如果目前的平台或伺服器組態不支援資源群組,此值為
NULL(請參閱資源群組限制)。EXECUTION_ENGINE查詢執行引擎。值為
PRIMARY或SECONDARY。用於 HeatWave 服務和 HeatWave,其中PRIMARY引擎為InnoDB,而SECONDARY引擎為 HeatWave (RAPID)。對於 MySQL Community Edition Server、MySQL Enterprise Edition Server (內部部署) 和沒有 HeatWave 的 HeatWave 服務,值始終為PRIMARY。CONTROLLED_MEMORY執行緒使用的受控記憶體量。
MAX_CONTROLLED_MEMORY在執行緒執行期間看到的
CONTROLLED_MEMORY最大值。TOTAL_MEMORY執行緒目前使用的記憶體量,無論是否受控。
MAX_TOTAL_MEMORY在執行緒執行期間看到的
TOTAL_MEMORY最大值。TELEMETRY_ACTIVE執行緒是否附加了有效的遙測連線。值為
YES或NO。
threads 資料表有以下索引
主鍵位於 (
THREAD_ID)索引位於 (
NAME)索引位於 (
PROCESSLIST_ID)索引位於 (
PROCESSLIST_USER,PROCESSLIST_HOST)索引位於 (
PROCESSLIST_HOST)索引位於 (
THREAD_OS_ID)索引位於 (
RESOURCE_GROUP)
不允許對 threads 資料表使用 TRUNCATE TABLE。