MySQL中 SHOW FULL PROCESSLIST輸出中State列的所有可能值(最新整理)
SHOW FULL PROCESSLIST輸出中State` 列的所有可能值,以及這些值代表的含義,這能幫你精準(zhǔn)判斷數(shù)據(jù)庫(kù)連接的狀態(tài)(包括鎖相關(guān)、執(zhí)行狀態(tài)等)。
一、State列核心分類(lèi)及含義
State 列描述了當(dāng)前線程正在執(zhí)行的操作狀態(tài),不同狀態(tài)對(duì)應(yīng)不同的數(shù)據(jù)庫(kù)行為,以下是最常見(jiàn)且實(shí)用的分類(lèi)(按場(chǎng)景劃分):
1. 鎖相關(guān)狀態(tài)(排查鎖表核心)
這是你最關(guān)心的鎖表相關(guān)狀態(tài),直接反映鎖等待 / 阻塞:
| 狀態(tài)值 | 含義 |
|---|---|
Waiting for table lock | 等待表級(jí)鎖(MyISAM 引擎為主,InnoDB 顯式加表鎖時(shí)也會(huì)出現(xiàn)) |
Waiting for row lock | 等待行級(jí)鎖(InnoDB 引擎行鎖沖突,比如更新同一行數(shù)據(jù)) |
Waiting for metadata lock | 等待元數(shù)據(jù)鎖(比如修改表結(jié)構(gòu)時(shí),其他線程正在讀寫(xiě)該表) |
Waiting for global read lock | 等待全局讀鎖(比如執(zhí)行 FLUSH TABLES WITH READ LOCK 時(shí)) |
Waiting for unlock | 等待解鎖(線程持有鎖但等待其他鎖釋放) |
2. 查詢執(zhí)行相關(guān)狀態(tài)
反映 SQL 執(zhí)行過(guò)程中的階段:
| 狀態(tài)值 | 含義 |
|---|---|
Sending data | 正在向客戶端返回查詢結(jié)果(不是 “發(fā)送數(shù)據(jù)慢”,可能是查詢計(jì)算 / 掃描數(shù)據(jù)耗時(shí)) |
Executing | 正在執(zhí)行 SQL 語(yǔ)句(核心執(zhí)行階段) |
Preparing | 預(yù)處理 SQL(比如預(yù)處理語(yǔ)句 PREPARE) |
Sorting result | 正在對(duì)查詢結(jié)果排序(比如 ORDER BY 未命中索引) |
Creating sort index | 創(chuàng)建臨時(shí)排序索引(排序時(shí)無(wú)可用索引,性能差) |
Copying to tmp table | 將結(jié)果復(fù)制到臨時(shí)表(比如 GROUP BY 未命中索引) |
Reading from net | 從客戶端讀取 SQL 語(yǔ)句 |
Writing to net | 向客戶端發(fā)送數(shù)據(jù) |
3. 連接 / 空閑相關(guān)狀態(tài)
| 狀態(tài)值 | 含義 |
|---|---|
Sleep | 線程空閑(無(wú)操作),等待客戶端發(fā)送新的 SQL |
Connected | 剛建立連接,還未執(zhí)行 SQL |
Login | 客戶端正在登錄數(shù)據(jù)庫(kù) |
4. 事務(wù)相關(guān)狀態(tài)
| 狀態(tài)值 | 含義 |
|---|---|
Starting | 事務(wù)開(kāi)始階段 |
Committing | 事務(wù)提交階段 |
Rolling back | 事務(wù)回滾階段 |
Waiting for transaction lock | 等待事務(wù)鎖 |
5. 其他常見(jiàn)狀態(tài)
| 狀態(tài)值 | 含義 |
|---|---|
Analyzing | 分析查詢語(yǔ)句(優(yōu)化器階段) |
Checking permissions | 檢查用戶權(quán)限 |
Opening tables | 打開(kāi)表(表緩存不足時(shí)會(huì)頻繁出現(xiàn)) |
Closing tables | 關(guān)閉表 |
Updating | 正在執(zhí)行更新操作(UPDATE/DELETE) |
Inserting | 正在執(zhí)行插入操作(INSERT) |
二、關(guān)鍵說(shuō)明
- 狀態(tài)是動(dòng)態(tài)的:
State是線程的瞬時(shí)狀態(tài),同一線程的狀態(tài)會(huì)隨操作階段變化(比如從Executing變?yōu)?Sending data); - 空值情況:部分線程(如系統(tǒng)線程)的
State可能為空; - 異常識(shí)別:如果大量線程停留在
Waiting for table lock/Waiting for metadata lock等 “Waiting” 類(lèi)狀態(tài),且持續(xù)時(shí)間長(zhǎng),說(shuō)明存在鎖阻塞或性能問(wèn)題。
三、實(shí)用示例:篩選異常狀態(tài)
你可以通過(guò)以下 SQL 快速篩選出鎖等待 / 阻塞的線程:
-- 篩選所有鎖等待相關(guān)的線程 SELECT id, user, host, db, command, time, state, info FROM information_schema.processlist WHERE state LIKE 'Waiting for%lock%' AND info IS NOT NULL;
總結(jié)
- 核心鎖狀態(tài):排查鎖表重點(diǎn)關(guān)注
Waiting for table lock、Waiting for row lock、Waiting for metadata lock這三類(lèi)狀態(tài); - 性能相關(guān):
Copying to tmp table、Sorting result等狀態(tài)通常提示 SQL 未優(yōu)化(缺少索引); - 空閑狀態(tài):
Sleep狀態(tài)線程過(guò)多可能是連接未釋放,需檢查應(yīng)用連接池配置。
到此這篇關(guān)于MySQL中 SHOW FULL PROCESSLIST` 輸出中 `State` 列的所有可能值的文章就介紹到這了,更多相關(guān)mysql show full processlist 輸出state列值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MYSQL必知必會(huì)讀書(shū)筆記第二章之版本更改
本文是小編日常收集整理些有關(guān)mysql必知必會(huì)筆記整理第二章,小編感覺(jué)非常實(shí)用,特此分享到腳本之家平臺(tái),供大家參考2016-05-05
MySQL數(shù)據(jù)庫(kù)的觸發(fā)器和事務(wù)
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)的觸發(fā)器和事務(wù),觸發(fā)器是SQL?server提供給程序員和數(shù)據(jù)分析員來(lái)保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過(guò)程,是由事件來(lái)觸發(fā)2022-08-08
MySQL安裝過(guò)程報(bào)starting?the?server報(bào)錯(cuò)詳細(xì)解決方案(附MySQL安裝程序)
如果電腦是第一次安裝MySQL,一般不會(huì)出現(xiàn)這樣的報(bào)錯(cuò),starting the server失敗通常是因?yàn)樯洗伟惭b的該軟件未清除干凈,這篇文章主要給大家介紹了關(guān)于MySQL安裝過(guò)程報(bào)starting?the?server報(bào)錯(cuò)的詳細(xì)解決方案,文中還附MySQL安裝程序,需要的朋友可以參考下2024-03-03
MySQL基于索引的壓力測(cè)試的實(shí)現(xiàn)
本文主要介紹了MySQL基于索引的壓力測(cè)試的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11

