一. 慢查詢日志
SQL是我們和數據庫交流最重要的部分,所以我們在調優的時候,需要花費的大量時間就在SQL調優上面。
慢查詢日志按照健哥的經驗來說就是發現系統中查詢慢的SQL語句的有效手段之一。常見的分析手段有慢查詢日志,EXPLAIN 分析查詢,通過定位分析性能的瓶頸,才能更好的優化數據庫系統的性能。
開啟慢查詢日志
在配置文件my.cnf或my.ini中在[mysqld]一行下面加入兩個配置參數:
log-slow-queries=/data/mysqldata/slow-query.log
long_query_time=3
log-slow-queries參數為慢查詢日志存放的位置,一般這個目錄要有mysql的運行帳號的可寫權限,一般都將這個目錄設置為mysql的數據存放目錄;
long_query_time=5中的5表示查詢超過五秒才記錄;
還可以在my.cnf或者my.ini中添加log-queries-not-using-indexes參數,表示記錄下沒有使用索引的查詢。
2. 慢查詢分析
我們可以通過打開log文件查看得知哪些SQL執行效率低下 ,從日志中,可以發現查詢時間超過5 秒的SQL,而小于5秒的沒有出現在此日志中。
如果慢查詢日志中記錄內容很多,可以使用mysqldumpslow工具(MySQL客戶端安裝自帶)來對慢查詢日志進行分類匯總。mysqldumpslow對日志文件進行了分類匯總,顯示匯總后摘要結果。
進入log的存放目錄,運行:
[root@mysql_data]# mysqldumpslow slow-query.log
Reading mysql slow query log fromslow-query.log
Count: 2 Time=11.00s (22s) Lock=0.00s (0s)Rows=1.0 (2), root[root]@mysql
select count(N) from t_user;
mysqldumpslow命令:
/path/mysqldumpslow -s c -t 顯示SQL條數 日志保存位置
這會輸出記錄次數最多的10條SQL語句,其中:
-s:是表示按照何種方式排序,c、t、l、r分別是按照記錄次數、時間、查詢時間、返回的記錄數來排序,ac、at、al、ar:表示相應的倒敘。
-t:是top n的意思,即為返回前面多少條的數據。
-g:后邊可以寫一個正則匹配模式,大小寫不敏感的。
健哥來給各位小伙伴舉個栗子:
/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log
得到返回記錄集最多的10個查詢。
使用mysqldumpslow命令可以非常明確的得到各種我們需要的查詢語句,對MySQL查詢語句的監控、分析、優化是MySQL優化非常重要的一步。開啟慢查詢日志后,由于日志記錄操作,在一定程度上會占用CPU資源影響mysql的性能,但是可以階段性開啟來定位性能瓶頸。