剖析單條查詢()
在定位到需要優化的單條查詢後可以針對此查詢鑽取更多的信息確認為什麼會花費這麼長的時間執行以及需要如何去優化關於如何優化查詢的技術將在本書後續的一些章節討論在此之前還需要介紹一些相關的背景知識本章的主要目的是介紹如何方便地測量查詢執行的各部分花費了多少時間有了這些數據才能決定采用何種優化技術
不幸的是MySQL 目前大多數的測量點對於剖析查詢都沒有什麼幫助當然這種狀況正在改善但在本書寫作之際大多數生產環境的服務器還沒有使用包含最新剖析特性的版本所以在實際應用中除了SHOW STATUSSHOW PROFILE檢查慢查詢日志的條目(這還要求必須是Percona Server官方MySQL 版本的慢查詢日志缺失了很多附加信息)這三種方法外就沒有什麼更好的辦法了下面將逐一演示如何使用這三種方法來剖析單條查詢看看每一種方法是如何顯示查詢的執行情況的
使用SHOW PROFILE
SHOW PROFILE 命令是在MySQL 以後的版本中引入的來源於開源社區中的JeremyCole 的貢獻這是在本書寫作之際唯一一個在GA 版本中包含的真正的查詢剖析工具默認是禁用的但可以通過服務器變量在會話(連接)級別動態的修改
mysql> SET profiling = ;
然後在服務器上執行的所有語句都會測量其耗費的時間和其他一些查詢執行狀態變更相關的數據這個功能有一定的作用而且最初的設計功能更強大但未來版本中可能會被Performance Schema 所取代盡管如此這個工具最有用的作用還是在語句執行期間剖析服務器的具體工作
當一條查詢提交給服務器時此工具會記錄剖析信息到一張臨時表並且給查詢賦予一個從開始的整數標識符下面是對Sakila樣本數據庫的視圖的剖析結果
mysql> SELECT * FROM sakilanicer_but_slower_film_list;
[query results omitted]
rows in set ( sec)
該查詢返回了 行記錄花費了大概/ 秒下面看一下SHOW PROFILES 有什麼結果
mysql> SHOW PROFILES;
++++
| Query_ID | Duration | Query |
++++
| | | SELECT * FROM sakilanicer_but_slower_film_list |
++++
首先可以看到的是以很的精度顯示了查詢的響應時間這很好MySQL客戶顯示的時間只有兩位小數對於一些執行得很快的查詢這樣的精度是不夠的下面繼續看接下來的輸出
mysql> SHOW PROFILE FOR QUERY ;
+++
| Status | Duration |
+++
| starting | |
| Opening tables | |
| System lock | |
| Table lock | |
[] []
From:http://tw.wingwit.com/Article/program/MySQL/201311/29710.html