標籤:
簡述:
分析MySQL語句查詢效能的方法除了使用 EXPLAIN 輸出執行計畫,還可以讓MySQL記錄下查詢 超過指定時間的語句,我們將超過指定時間的SQL語句查詢稱為“慢查詢”。
它能記錄下所有執行超過 long_query_time時間的SQL語句, 幫你找到執行慢的SQL, 方便我們對這些SQL進行最佳化。
在最佳化MySQL時,通常需要對資料庫進行分析,常見的分析手段有 慢查詢日誌,EXPLAIN 分析查詢, profiling分析 以及 show命令查詢系統狀態及系統變數,通過定位分析效能的瓶頸,才能更好的最佳化資料庫系統的效能。
思路:
--> 分析慢查詢日誌 --> 查看錶結構、表狀態 --> 查看錶索引 --> 分析sql語句 --> explain --> 修改sql語句 --> 驗證修改結果
慢查詢日誌配置:
1、在my.ini設定檔中添加以下選項:
log-slow-queries=master-0-slow.log 慢查詢日誌位置
log-queries-not-using-indexes=on 沒有使用索引的Query也計入慢查詢日誌
long_query_time=1 當Query語句大於1秒時記入慢查詢日誌
--> linux下mysql開啟慢查詢方法:
mysql在linux系統中的設定檔一般是my.cnf,我的路徑是/etc/my.cnf,你根據自己編譯安裝的路徑去尋找 vi /etc/my.cnf
一樣是在[mysqld]下面加上:
log-slow-queries=/var/lib/mysql/slowquery.log
long_query_time=2
log-queries-not-using-indexes
這裡就不再解釋了,加上後重啟mysql,就可以到/var/lib/mysql下看是否有slowquery.log產生了. cd /var/lib/mysql/
2、在命令視窗通過命令查詢慢查詢配置資訊
① 查看Query語句執行時間大於多少秒計入慢查詢日誌
通過命令列動態配置:MySQL> set long_query_time=1;
② 查看慢查詢日誌是否開啟與存放路徑
通過命令列動態配置:MySQL> set global slow_query_log=‘ON‘
慢查詢日誌格式
# Time: 120331 10:05:48
# [email protected]: root[root] @ 91SK-B49337164E [10.10.10.99]
# Query_time: 14.031250 Lock_time: 0.218750 Rows_sent: 0 Rows_examined: 90785 SET timestamp=1333159548; delete from orderinfo;
這是慢查詢日誌中的一條,用了14.031250秒,鎖了0.218750秒,返回0行,一共查了90785行
通過mysqldumpslow命令查看慢查詢日誌:
1、 由於mysql內建命令mysqldumpslow.pl使用的是perl指令碼,所以需要安裝perl環境。下載ActivePerl.exe安裝包並進行安裝。
2、在DOS命令列下執行mysqldumpslow命令
使用mysqldumpslow命令在f:\master-0-slow.log慢查詢日誌中尋找日誌中記錄次數最多的前10條SQL語句。並存放到f:\master-slow-0.txt檔案中。
mysqldumpslow命令解析:
-s, 表示按照何種方式排序,c、t、l、r分別是按照記錄次數、時間、查詢時間、返回的記錄數來排序,ac、at、al、ar,表示相應的倒敘;
-t, 是top n的意思,即為返回前面多少條的資料;
-g, 後邊可以寫一個正則匹配模式,大小寫不敏感的;
例如:返回記錄集最多的10個查詢。
按照時間排序的前10條裡面含有左串連的查詢語句。
MySQL 慢查詢