MySQL數據庫最常見的兩個瓶頸是CPU和I/O的瓶頸,CPU在飽和的時候一般發生在數據裝入內存或從磁盤上讀取數據時候。磁盤I/O瓶頸發生在裝入數據遠大於內存容量的時候,如果應用分布在網絡上,那麼查詢量相當大的時候那麼平瓶頸就會出現在網絡上,我們可以用mpstat, iostat, sar和vmstat來查看系統的性能狀態。今天我們不討論服務器硬件的性能瓶頸,只是談談MySQL系統本身,通常需要對數據庫進行分析,常見的分析手段有慢查詢日志,EXPLAIN 分析查詢,profiling分析以及show命令查詢系統狀態及系統變量,通過定位分析性能的瓶頸,才能更好的優化數據庫系統的性能。
這個是一系列的文章,今天只談SHOW PROFILE Syntax。通過它我們可以清楚的知道某條Query的性能瓶頸到底在哪裡,是消耗的 CPU計算太多,還是需要的的 IO 操作太多?具體的做法如下:
1.開啟profiling參數
set profiling=1;
2.執行Query
select * from a;
3.獲取系統中保存的所有 Query 的 profile 概要信息
show profiles;
4.針對單個 Query 獲取詳細的 profile 信息。
show profile all for query 1;
語法如下:
SHOW PROFILE [type [, type] ... ]
[FOR QUERY n]
[LIMIT row_count [OFFSET offset]]
type:
ALL:顯示所有的開銷信息
| BLOCK IO:顯示塊IO相關開銷
| CONTEXT SWITCHES:上下文切換相關開銷
| CPU:顯示用戶CPU時間、系統CPU時間
| IPC:顯示發送和接收相關開銷信息
| MEMORY:目前沒有實現
| PAGE FAULTS:顯示頁面錯誤相關開銷信息
| SOURCE:顯示和Source_function,Source_file,Source_line相關的開銷信息
| SWAPS:顯示交換次數相關開銷的信息
以上信息也可以通過INFORMATION_SCHEMA.PROFILING表中的信息來查看。