2 show profile
SHOW PROFILE和SHOW PROFILES語句顯示概要資訊,該資訊訓示在目前會話過程中執行的語句的資源使用情況。
SHOW PROFILE和SHOW PROFILES語句已被棄用,并将在以後的MySQL版本中删除,而改用性能模式。此處我們就簡單介紹一下,大家知道有這個東西就行了。
- 檢視是否開啟profile
-
實戰講解MySQL的expain執行計劃,面試官當場要了我(下)2 show profile3 trace分析優化器 - 可見,預設profiling是關閉的。
可通過set語句在session級别啟動profiling:
set profiling=1;
可檢視執行過程中每個線程的狀态和耗時。
其中的 sendingdata 狀态表示MySQL線程開始通路資料行并把結果傳回給用戶端,而不僅僅是傳回給用戶端,由于在sending data狀态下,MySQL線程往往需要做大量的磁盤讀取操作;是以經常是整個查詢中最耗時的狀态。
支援選擇all,cpu,block io,context,switch,page faults等明細,來檢視MySQL在使用什麼資源上耗費了過高的時間,例如,選擇檢視cpu的耗費時間
show profile cpu for query 6;
對比MyISAM的操作,同樣執行count(*)操作,檢查profile,Innodb表經曆了Sending data狀态,而MyISAM的表完全不需要通路資料
如果對MySQL 源碼感興趣,可以通過show profile source for query檢視sql解析執行過程的每個步驟對應的源碼檔案
show profile source for query 6
3 trace分析優化器
MySQL 5.6提供。通過trace檔案能夠進一步了解優化器的選擇,更好地了解優化器的行為。
使用方式
開啟trace,設定格式為json,設定trace最大能夠使用的記憶體,避免解析過程中因為預設記憶體小而不能完整顯示
set optimizer_trace="enabled=on",end_markers_in_json=on;
set optimizer_trace_max_mem_size=1000000;
接下來執行trace的sql語句
select * from ....where....
最後檢查information_schema.optimizer_trace就可以知道Mysql如何執行sql
select * from information_schema.optimizer_trace
參考