1.1 性能優化簡介
本書中將MySQL性能定義為完成某件任務所需要的時間,而不是每秒查詢次數、CPU利用率等方面;本書中默認向MySQL發送的一切命令都稱為查詢,諸如 SELECT/UPDATE/DELETE等等。
如果認為性能是響應時間,那么我們的目標就是降低響應時間,降低每個查詢的響應時間,那么第二個問題,就是先搞清楚時間花在哪里,即測量時間花在什么地方,無法測量就無法有效優化。
注意,測量范圍不要搞錯,如出現慢查詢,就應該測量或解決慢查詢,不應該去排查整個服務器的狀況;另外,查詢的時間包括等待時間和執行時間,一般處理和解決執行時間,等待時間長的原因很復雜。
通過工具可以顯示性能剖析的結果,但注意很多情況是通過結果發現不了的,注意尋找哪些是值得優化的查詢、哪些發生了異常、還有很多被隱藏的細節(如平均響應時間很小,但的確存在1~2個真正耗時的慢查詢)
1.2 對應用程序進行性能剖析
除了對MySQL服務器進行性能剖析,還有必要對應用程序本身做性能剖析,比如PHP程序;值得注意的是性能剖析也會使服務器變慢,但相對剖析程序所做得貢獻來說,那點消耗已經無所謂;
推薦了進行PHP性能剖析的工具,xhprof、Ifp等,不用重新發明“輪子”。
1.3 剖析MySQL查詢
對查詢的剖析有兩種方式,一種是剖析整個MySQL服務器負載,一種是剖析單條語句查詢;
剖析服務器負載,可以通過MySQL提供的慢查詢日志,現在通過設置 long_query_time 可以將粒度設置到微妙級別;MySQL提供的慢查詢日志是開銷最低、精度最高的測試查詢時間的工具。新浪的SAE就提供針對MySQL的慢查詢日志。
剖析單條查詢,使用 SHOW PROFILES、SHOW STATUS、查詢慢查詢日志的條目。先執行一條查詢,然后使用 SHOW PROFILES 查看查詢執行的時間,然后使用 SHOW PROFILE WHERE QUERY 1,顯示該條查詢執行的過程,及每個過程所話費的時間,經過排序后,就可以知道 查詢把時間花在那個過程上了。
1.4 診斷間歇性問題
1.5 其他剖析工具
1.6 總結