-
- 介紹
- Query Profiler是MYSQL自帶的一種query診斷分析工具,通過它可以分析出一條SQL語句的性能瓶頸在什麼地方。
- 通常我們是使用的explain,以及slow query log都無法做到精確分析,但是Query Profiler卻可以定位出一條SQL語句執行的各種資源消耗情況,比如CPU,IO等,以及該SQL執行所耗費的時間等。不過該工具只有在MYSQL 5.0.37以及以上版本中才有實現。
- 默認的情況下,MYSQL的該功能沒有打開,需要自己手動啓動。
- 語句使用
- show profile 和 show profiles 語句可以展示當前會話(退出session後,profiling重置爲0) 中執行語句的資源使用情況.
- show profiles :以列表形式顯示最近發送到服務器上執行的語句的資源使用情況.顯示的記錄數由變量:profiling_history_size 控制,默認15條
- show profile: 展示最近一條語句執行的詳細資源佔用信息,默認顯示 Status和Duration兩列
- show profile 還可根據 show profiles 列表中的 Query_ID ,選擇顯示某條記錄的性能分析信息
-
- 開啓Profile功能
- Profile 功能由MySQL會話變量 : profiling控制,默認是OFF關閉狀態。
- 查看是否開啓了Profile功能:
* select @@profiling;
* show variables like ‘%profil%’;
- 開啓profile功能
* set profiling=1; --1是開啓、0是關閉
-
- 示例
- 查看是否打開了性能分析功能
select @@profiling;
- 打開 profiling 功能
set profiling=1;
- 執行sql語句
- 執行 show profiles 查看分析列表
- 查詢第二條語句的執行情況
show profile for query 2;
- 可指定資源類型查詢
show profile cpu,swaps for query 2;
具體的性能優化細節
- 合理的創建及使用索引(考慮數據的增刪情況)
- 合理的冗餘字段(儘量建一些大表,考慮數據庫的三範式和業務設計的取捨)
- 使用SQL要注意一些細節:select語句中儘量不要使用*、count(*),WHERE語句中儘量不要使用1=1、in語句(建議使用exists)、注意組合索引的創建順序按照順序組着查詢條件、儘量查詢粒度大的SQL放到最左邊、儘量建立組合索引
- 合理利用慢查詢日誌、explain執行計劃查詢、show profile查看SQL執行時的資源使用情況