1、show profile 是什麼
是mysql提供可以用來分析當前會話中語句執行的資源消耗情況。可以用於SQL的調優的測量。
官網:http://dev.mysql.com/doc/refman/5.5/en/show-profile.html
2、查看 profile 的開啓狀態
默認情況下,參數處於關閉狀態,並保存最近15次的運行結果。
show variables like '%profiling%';
3、開啓 profiles 的狀態
set profiling=1; ## 開啓show profiles
show variables like '%profiling%'; ## 再次確認開啓狀態
4、 運行sql
運行幾個較複雜、耗時間的sql,以便查看效果。
select * from emp group by id%10 limit 150000;
select * from emp group by id%20 order by 5;
select * from dept;
5、 查看結果
show profiles;
6、診斷SQL
show profile cpu,block io for query n ; ## n爲上一步前面的問題SQL數字號碼
type:
| ALL --顯示所有的開銷信息
| BLOCK IO --顯示塊IO相關開銷
| CONTEXT SWITCHES --上下文切換相關開銷
| CPU --顯示CPU相關開銷信息
| IPC --顯示發送和接收相關開銷信息
| MEMORY --顯示內存相關開銷信息
| PAGE FAULTS --顯示頁面錯誤相關開銷信息
| SOURCE --顯示和Source_function,Source_file,Source_line相關的開銷信息
| SWAPS --顯示交換次數相關開銷的信息
下圖是網上找的,對某個SQL進行分析時,耗時特別長的。
7、開發中注意的事項
執行 show profile cpu,block io for query n ;
的結果中,出現下面的情況,則意味着SQL急需優化:
converting HEAP to MyISAM
查詢結果太大,內存都不夠用了往磁盤上搬了。Creating tmp table
創建臨時表,拷貝數據到臨時表,用完再刪除表。Copying to tmp table on disk
把內存中臨時表複製到磁盤,危險!locked