簡述:
分析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
# User@Host: 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條裡面含有左連接的查詢語句。