MySQL執行狀態的檢視與分析

2022-06-30 08:27:11 字數 2206 閱讀 7085

**:

當感覺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語句就顯示不全,但是乙個判斷問題語句的重要依據

state 常見狀態分析

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資料庫是常見的兩個瓶頸是cpu和i/o的瓶頸,cpu在飽和的時候一般發生在資料裝入記憶體或從磁碟上讀取資料時候。磁碟i/o瓶頸發生在裝入資料遠大於記憶體容量的時候,如果應用分布在網路上,那麼查詢量相當大的時候那麼平瓶頸就會出現在網路上,我們可以用mpstat, iostat, sar和vmstat來檢視系統的效能狀態。

除了伺服器硬體的效能瓶頸,對於mysql系統本身,我們可以使用工具來優化資料庫的效能,通常有三種:使用索引,使用explain分析查詢以及調整mysql的內部配置。

在優化mysql時,通常需要對資料庫進行分析,常見的分析手段有慢查詢日誌,explain 分析查詢,profiling分析以及show命令查詢系統狀態及系統變數,通過定位分析效能的瓶頸,才能更好的優化資料庫系統的效能。

MySQL執行狀態的檢視與分析

當感覺mysql效能出現問題時,通常會先看下當前mysql的執行狀態,使用show processlist來檢視,例如 其中state狀態列資訊非常重要,先看下各列含義,然後看下state常用狀態 各列的含義 1 id 乙個標識,你要kill乙個語句的時候使用,例如mysql kill 207 2 ...

檢視MySQL執行狀態

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

MySQL執行狀態分析

當感覺mysql效能出現問題時,通常會先看下當前mysql的執行狀態,使用 show processlist 來檢視,例如 其中state狀態列資訊非常重要,先看下各列含義,然後看下state常用狀態 1 id 乙個標識,你要kill乙個語句的時候使用,例如mysql kill 207 2 user...