MySQL執行狀態分析

2021-07-09 19:15:07 字數 1459 閱讀 1126

當感覺mysql效能出現問題時,通常會先看下當前mysql的執行狀態,使用 show processlist 來檢視,例如:

其中state狀態列資訊非常重要,先看下各列含義,然後看下state常用狀態

1、id

乙個標識,你要kill乙個語句的時候使用,例如mysql> kill 207;

2、user

顯示當前使用者,如果不是root,這個命令就只顯示你許可權範圍內的sql語句

3、host

顯示這個語句是從哪個ip 的哪個埠上發出的,可用來追蹤出問題語句的使用者

4、db

顯示這個程序目前連線的是哪個資料庫

5、command

顯示當前連線的執行的命令,一般就是休眠(sleep),查詢(query),連線(connect)

6、time

此這個狀態持續的時間,單位是秒

7、state

顯示使用當前連線的sql語句的狀態,很重要的列,state只是語句執行中的某乙個狀態,例如查詢,需要經過copying to tmp table,sorting result,sending data等狀態才可以完成

8、info

顯示這個sql語句,因為長度有限,所以長的sql語句就顯示不全,但是乙個判斷問題語句的重要依據

1、sleep

通常代表資源未釋放,如果是通過連線池,sleep狀態應該恆定在一定數量範圍內,例如:

資料查詢時間為0.1秒,而網路輸出需要1秒左右,原本資料連線在0.1秒即可釋放,但是因為前端程式未執行close操作,直接輸出結果,那麼在結果未展現在使用者桌面前,該資料庫連線一直維持在sleep狀態

2、locked

操作被鎖定,通常使用innodb可以很好的減少locked狀態的產生

3、copy to tmp table

索引及現有結構無法涵蓋查詢條件時,會建立乙個臨時表來滿足查詢要求,產生巨大的i/o壓力copy to tmp table通常與連表查詢有關,建議減少關聯查詢或者深入優化查詢語句,如果出現此狀態的語句執行時間過長,會嚴重影響其他操作,此時可以kill掉該操作

4、sending data

sending data並不是傳送資料,是從物理磁碟獲取資料的程序,如果你的影響結果集較多,那麼就需要從不同的磁碟碎片去抽取資料,如果sending data連線過多,通常是某查詢的影響結果集過大,也就是查詢的索引項不夠優化

5、storing result to query cache

如果頻繁出現此狀態,使用set profiling分析,如果存在資源開銷在sql整體開銷的比例過大(即便是非常小的開銷,看比例),則說明query cache碎片較多,使用flush query cache可即時清理,query cache引數可適當酌情設定

mysql 執行分析 mysql 執行狀態分析

當感覺mysql效能出現問題時,通常會先看下當前mysql的執行狀態,使用 show processlist 來檢視,例如 mysql show processlist id user host db command time state info 207 root 192.168.0.2 5162...

mysql 執行狀態

show processlist 或使用mysql administrator 檢視當前執行connection的狀態 state列出的狀態主要有以下幾種 checking table 正在檢查資料表 這是自動的 closing tables 正在將表中修改的資料重新整理到磁碟中,同時正在關閉已經用...

檢視MySQL執行狀態

了解 mysql 資料庫的執行狀態查詢 了解當前 mysql 的執行時間 共執行了多少次 select update 是否進行碎片化整理 當前連線的個數 最大併發數 show status 命令常用的 show status like uptime 啟動時間 show status like com...