MySQL 程序清單會指出伺服器中執行的執行緒集合目前正在執行的作業。processlist
表格是程序資訊的其中一個來源。如需此表格與其他來源的比較,請參閱程序資訊的來源。
可以直接查詢 processlist
表格。如果您具有 PROCESS
權限,則可以查看所有執行緒,甚至是屬於其他使用者的執行緒。否則 (若沒有 PROCESS
權限),非匿名使用者可以存取其本身執行緒的資訊,但不能存取其他使用者的執行緒資訊,而匿名使用者則無法存取任何執行緒資訊。
如果已啟用 performance_schema_show_processlist
系統變數,則 processlist
表格也會做為 SHOW PROCESSLIST
陳述式之下替代實作的基礎。如需詳細資訊,請參閱本節稍後說明。
processlist
表格會針對每個伺服器程序包含一個資料列
mysql> SELECT * FROM performance_schema.processlist\G
*************************** 1. row ***************************
ID: 5
USER: event_scheduler
HOST: localhost
DB: NULL
COMMAND: Daemon
TIME: 137
STATE: Waiting on empty queue
INFO: NULL
*************************** 2. row ***************************
ID: 9
USER: me
HOST: localhost:58812
DB: NULL
COMMAND: Sleep
TIME: 95
STATE:
INFO: NULL
*************************** 3. row ***************************
ID: 10
USER: me
HOST: localhost:58834
DB: test
COMMAND: Query
TIME: 0
STATE: executing
INFO: SELECT * FROM performance_schema.processlist
...
processlist
表格包含以下欄位
ID
連線識別碼。這與
SHOW PROCESSLIST
陳述式之Id
欄位中顯示的值相同,在效能結構描述threads
表格的PROCESSLIST_ID
欄位中顯示,並由執行緒內的CONNECTION_ID()
函數傳回。USER
發出陳述式的 MySQL 使用者。
system user
值是指由伺服器產生以在內部處理任務的非用戶端執行緒,例如延遲資料列處理常式執行緒,或在複本主機上使用的 I/O 或 SQL 執行緒。對於system user
,Host
欄位中不會指定主機。unauthenticated user
是指已與用戶端連線關聯,但尚未發生用戶端使用者驗證的執行緒。event_scheduler
是指監控排程事件的執行緒 (請參閱第 27.5 節,「使用事件排程器」)。注意USER
值system user
與SYSTEM_USER
權限不同。前者指定內部執行緒。後者區分系統使用者和一般使用者帳戶類別 (請參閱第 8.2.11 節,「帳戶類別」)。HOST
發出語句的用戶端主機名稱 (除了
system user
,它沒有主機名稱)。TCP/IP 連線的主機名稱會以
格式回報,以便更容易判斷哪個用戶端正在執行哪個操作。host_name
:client_port
DB
執行緒的預設資料庫,如果未選取則為
NULL
。COMMAND
執行緒代表用戶端執行的指令類型,如果工作階段閒置則為
Sleep
。如需執行緒指令的描述,請參閱第 10.14 節「檢視伺服器執行緒 (程序) 資訊」。此欄的值對應於用戶端/伺服器協定的COM_
指令和xxx
Com_
狀態變數。請參閱第 7.1.10 節「伺服器狀態變數」。xxx
TIME
執行緒處於目前狀態的時間 (以秒為單位)。對於複本 SQL 執行緒,該值是上次複寫事件的時間戳記與複本主機的實際時間之間的時間 (以秒為單位)。請參閱第 19.2.3 節「複寫執行緒」。
STATE
表示執行緒正在執行的動作、事件或狀態。如需
STATE
值的描述,請參閱第 10.14 節「檢視伺服器執行緒 (程序) 資訊」。大多數狀態都對應到非常快速的操作。如果執行緒在給定狀態中停留數秒,則可能需要調查問題。
INFO
執行緒正在執行的語句,如果未執行任何語句則為
NULL
。該語句可能是傳送至伺服器的語句,或者如果該語句執行其他語句,則可能是最內層的語句。例如,如果CALL
語句執行一個儲存程序,該程序正在執行SELECT
語句,則INFO
值會顯示SELECT
語句。EXECUTION_ENGINE
查詢執行引擎。值為
PRIMARY
或SECONDARY
。適用於 HeatWave 服務和 HeatWave,其中PRIMARY
引擎為InnoDB
,而SECONDARY
引擎為 HeatWave (RAPID
)。對於 MySQL 社群版伺服器、MySQL 企業版伺服器 (內部部署) 和不含 HeatWave 的 HeatWave 服務,該值始終為PRIMARY
。
processlist
表格具有下列索引
主索引鍵位於 (
ID
)
不允許對 processlist
表格執行 TRUNCATE TABLE
。
如先前所述,如果啟用 performance_schema_show_processlist
系統變數,則 processlist
表格會作為其他程序資訊來源替代實作的基礎
SHOW PROCESSLIST
語句。mysqladmin processlist 指令 (使用
SHOW PROCESSLIST
語句)。
預設的 SHOW PROCESSLIST
實作會從執行緒管理員內部遍歷活動執行緒,同時保留全域互斥鎖。這會產生負面的效能影響,尤其是在忙碌的系統上。替代的 SHOW PROCESSLIST
實作是以效能架構 processlist
表格為基礎。此實作會從效能架構查詢活動執行緒資料,而不是從執行緒管理員查詢,並且不需要互斥鎖。
MySQL 組態會以如下方式影響 processlist
表格的內容
最低必要組態
必須設定並建置 MySQL 伺服器,並啟用執行緒檢測。預設會啟用此功能;它會使用
DISABLE_PSI_THREAD
CMake 選項進行控制。效能架構必須在伺服器啟動時啟用。預設會啟用此功能;它會使用
performance_schema
系統變數進行控制。
在滿足該組態的情況下,
performance_schema_show_processlist
會啟用或停用替代的SHOW PROCESSLIST
實作。如果未滿足最低組態,則processlist
表格 (因此SHOW PROCESSLIST
) 可能不會傳回所有資料。建議的組態
為了避免忽略某些執行緒
將
performance_schema_max_thread_instances
系統變數保留為預設值,或者將其設定為至少與max_connections
系統變數一樣大。將
performance_schema_max_thread_classes
系統變數保留為預設值。
為了避免某些
STATE
欄值為空,請將performance_schema_max_stage_classes
系統變數保留為預設值。
這些組態參數的預設值為
-1
,這會使效能架構在伺服器啟動時自動調整它們的大小。在參數設定如指示的情況下,processlist
表格 (因此SHOW PROCESSLIST
) 會產生完整的程序資訊。
上述組態參數會影響 processlist
表格的內容。但是,對於給定的組態,processlist
內容不受 performance_schema_show_processlist
設定的影響。
替代程序清單實作不適用於 INFORMATION_SCHEMA
PROCESSLIST
表格或 MySQL 用戶端/伺服器協定的 COM_PROCESS_INFO
指令。