1、show profile 是什么?
Show profile 是mysql 提供可以用來分析當前會話中語句執(zhí)行的資源消耗情況??梢杂糜趕ql 調優(yōu)的測量。
-- 默認情況下,參數(shù)處于關閉狀態(tài),并保存最近15次的運行結果。
show variables like 'profiling%';
-- 開啟profile
set profiling=on;
set profiling_history_size=50;
2、診斷sql
show profiles;
show profile cpu, block io for query 問題sql數(shù)字號碼;
show profile all for query 144;
-- 日常開發(fā)需要注意的結論:
converting HEAP to MyISAM : 查詢結果太大,內存都不夠用了,往磁盤上搬了;
creating tmp table :創(chuàng)建臨時表,拷貝數(shù)據(jù)到臨時表,然后再刪除;
copying to tmp table on disk :把內存中臨時表復制到磁盤,危險?。?!
locked
注:以下四個中若出現(xiàn)一個或多個,表示sql 語句 必須優(yōu)化。
type:
ALL --顯示所有的開銷信息
BLOCK IO --顯示塊IO相關開銷
CONTEXT SWITCHES --上下文切換相關開銷
CPU --顯示CPU相關開銷信息
IPC --顯示發(fā)送和接收相關開銷信息
MEMORY --顯示內存相關開銷信息
PAGE FAULTS --顯示頁面錯誤相關開銷信息
SOURCE --顯示和Source_function,Source_file,Source_line相關的開銷信息
SWAPS --顯示交換次數(shù)相關開銷的信息
Status : sql 語句執(zhí)行的狀態(tài)
Duration: sql 執(zhí)行過程中每一個步驟的耗時
CPU_user: 當前用戶占有的cpu
CPU_system: 系統(tǒng)占有的cpu
Block_ops_in : I/O 輸入
Block_ops_out : I/O 輸出
總結:
show profile默認是關閉的,并且開啟后只存活于當前會話,也就說每次使用前都需要開啟。
通過show profiles查看sql語句的耗時時間,然后通過show profile命令對耗時時間長的sql語句進行診斷。
注意show profile診斷結果中出現(xiàn)相關字段的含義,判斷是否需要優(yōu)化sql語句。