共計 1627 個字符,預計需要花費 5 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
今天就跟大家聊聊有關 MySQL 中怎么查看執行狀態,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
當感覺 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 中怎么查看執行狀態有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。
向 AI 問一下細節