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_SCHEMA
PROCESSLIST
表格的ID
欄位中顯示的值相同,在SHOW PROCESSLIST
輸出的Id
欄位中顯示,並由執行緒內的CONNECTION_ID()
函式傳回。對於背景執行緒(與使用者連線無關),
PROCESSLIST_ID
為NULL
,因此值不是唯一的。PROCESSLIST_USER
與前景執行緒相關聯的使用者,背景執行緒則為
NULL
。PROCESSLIST_HOST
與前景執行緒相關聯的用戶端主機名稱,背景執行緒則為
NULL
。與
INFORMATION_SCHEMA
PROCESSLIST
表格的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_
命令和xxx
Com_
狀態變數。請參閱第 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
。