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.4 節「使用事件排程器」)。注意USER
值為system user
與SYSTEM_USER
權限不同。前者指定內部執行緒。後者區分系統使用者和一般使用者帳戶類別(請參閱第 8.2.11 節「帳戶類別」)。HOST
發出陳述式的用戶端主機名稱(
system user
除外,因為沒有主機)。TCP/IP 連線的主機名稱以
格式報告,以便更容易判斷哪個用戶端正在執行什麼動作。host_name
:client_port
DB
執行緒的預設資料庫,如果未選取任何資料庫,則為
NULL
。命令
執行緒代表客戶端執行的命令類型,如果工作階段閒置,則為
Sleep
。如需執行緒命令的說明,請參閱第 10.14 節「檢視伺服器執行緒(程序)資訊」。此欄的值對應於用戶端/伺服器協定的COM_
命令和xxx
Com_
狀態變數。請參閱第 7.1.10 節「伺服器狀態變數」xxx
時間
執行緒處於目前狀態的時間(以秒為單位)。對於副本 SQL 執行緒,此值是最後一個複製事件的時間戳記與副本主機的實際時間之間的時間差(秒)。請參閱第 19.2.3 節「複製執行緒」。
狀態
表示執行緒正在執行的動作、事件或狀態。如需
STATE
值的說明,請參閱第 10.14 節「檢視伺服器執行緒(程序)資訊」。大多數狀態對應於非常快速的操作。如果執行緒在給定的狀態下停留數秒,則可能存在需要調查的問題。
資訊
執行緒正在執行的陳述式,如果未執行任何陳述式,則為
NULL
。此陳述式可能是傳送至伺服器的陳述式,或者如果該陳述式執行其他陳述式,則可能是最內部的陳述式。例如,如果CALL
陳述式執行一個正在執行SELECT
陳述式的預存程序,則INFO
值會顯示SELECT
陳述式。執行引擎
查詢執行引擎。此值為
PRIMARY
或SECONDARY
。用於 HeatWave 服務和 HeatWave,其中PRIMARY
引擎為InnoDB
,而SECONDARY
引擎為 HeatWave (RAPID
)。對於 MySQL Community Edition Server、MySQL Enterprise Edition Server(內部部署)和沒有 HeatWave 的 HeatWave 服務,此值始終為PRIMARY
。
processlist
表格具有下列索引
以 (
ID
) 為主索引鍵
不允許對 processlist
表格使用 TRUNCATE TABLE
。
如前所述,如果啟用 performance_schema_show_processlist
系統變數,則 processlist
表格會作為其他程序資訊來源的替代實作基礎
SHOW PROCESSLIST
陳述式。mysqladmin processlist 命令(使用
SHOW PROCESSLIST
陳述式)。
預設的 SHOW PROCESSLIST
實作會在執行緒管理程式內持有一個全域互斥鎖,並遍歷作用中的執行緒。這會產生負面的效能影響,尤其是在忙碌的系統上。替代的 SHOW PROCESSLIST
實作基於 Performance Schema 的 processlist
表格。此實作從 Performance Schema 查詢作用中的執行緒資料,而不是從執行緒管理程式查詢,並且不需要互斥鎖。
MySQL 設定會以下列方式影響 processlist
表格內容
最低必要設定
必須啟用執行緒檢測功能來設定和建立 MySQL 伺服器。預設為啟用此功能;它使用
DISABLE_PSI_THREAD
CMake 選項進行控制。必須在伺服器啟動時啟用 Performance Schema。預設為啟用此功能;它使用
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
,這會導致 Performance Schema 在伺服器啟動時自動調整其大小。如果參數設定為指定的值,則processlist
表格(以及因此的SHOW PROCESSLIST
)會產生完整的程序資訊。
上述組態參數會影響 processlist
表格的內容。但是,對於給定的組態,processlist
內容不受 performance_schema_show_processlist
設定的影響。
替代的程序清單實作不適用於 INFORMATION_SCHEMA
的 PROCESSLIST
表格或 MySQL 用戶端/伺服器協定的 COM_PROCESS_INFO
命令。