慢查詢分析調優工具~show profile

繼上一篇mysqldumpslow工具的講解,今天來聊聊show profile。也是MySQL服務自帶的分析調優工具,不過這款更高級,比較接近底層硬件參數的調優。

慢查詢分析調優工具~show profile

查看show profile設置

<code>show variables like 'profiling%';//默認關閉,保存近15次的運行結果/<code>
慢查詢分析調優工具~show profile

開啟

<code>set profiling = on;/<code>
慢查詢分析調優工具~show profile

查看最近15次的運行結果

<code>show profiles;
備註:
show warnings;//可以顯示警告和報錯的信息/<code>
慢查詢分析調優工具~show profile

診斷運行的SQL

<code>命令:show profile cpu,block io for query query_id;
例子:show profile cpu,block io for query 3;
通過Status一列,可以看到整條SQL的運行過程
1. starting //開始
2. checking permissions //檢查權限
3. Opening tables //打開數據表
4. init //初始化
5. System lock //鎖機制
6. optimizing //優化器
7. statistics //分析語法樹
8. prepareing //預準備
9. executing //引擎執行開始
10. end //引擎執行結束
11. query end //查詢結束......
12. closing tables //釋放數據表
13. freeing items //釋放內存
14. cleaning up //徹底清理/<code>
慢查詢分析調優工具~show profile

<code>Type:ALL //顯示索引的開銷信息
BLOCK IO //顯示塊IO相關開銷
CONTEXT SWITCHES //上下文切換相關開銷
CPU //顯示CPU相關開銷信息
IPC //顯示發送和接收相關開銷信息
MEMORY //顯示內存相關開銷信息
PAGE FAULTS //顯示頁面錯誤相關開銷信息
SOURCE //顯示和source_function,source_file,source_line相關的開銷信息
SWAPS //顯示交換次數相關開銷的信息/<code>
<code>如出現以下一種或者幾種情況,說明SQL執行性能極其低下,亟需優化
* converting HEAP to MyISAM //查詢結果太大,內存都不夠用了往磁盤上搬了
* Creating tmp table //創建臨時表:拷貝數據到臨時表,用完再刪
* Copying to tmp table on disk //把內存中臨時表複製到磁盤,危險
* locked //出現死鎖/<code>

通過查詢數據表來診斷SQL(第二種查詢方式)

<code>select * from information_schema.profiling;/<code>
慢查詢分析調優工具~show profile

全局查詢日誌(第二種SQL診斷方式)

<code>此方式診斷較簡單(參數少,適合定位有問題的SQL),記錄到數據庫(建議只在測試庫環境進行)/<code>

設置

<code>方式1:
命令行
1. set global general_log = 1;
2. set global log_output = 'TABLE';/<code>
<code>方式2:
配置文件
* vim my.cnf
general_log =1
general_log_file = /path/logfile
log_output = FILE
* 重啟MySQL服務/<code>

診斷SQL

<code>select * from mysql.general_log;/<code>
慢查詢分析調優工具~show profile


分享到:


相關文章: