一. 慢查詢?nèi)罩?/p>
SQL是我們和數(shù)據(jù)庫(kù)交流最重要的部分,所以我們?cè)谡{(diào)優(yōu)的時(shí)候,需要花費(fèi)的大量時(shí)間就在SQL調(diào)優(yōu)上面。
慢查詢?nèi)罩景凑战「绲慕?jīng)驗(yàn)來(lái)說(shuō)就是發(fā)現(xiàn)系統(tǒng)中查詢慢的SQL語(yǔ)句的有效手段之一。常見(jiàn)的分析手段有慢查詢?nèi)罩?,EXPLAIN 分析查詢,通過(guò)定位分析性能的瓶頸,才能更好的優(yōu)化數(shù)據(jù)庫(kù)系統(tǒng)的性能。
開(kāi)啟慢查詢?nèi)罩?/p>
在配置文件my.cnf或my.ini中在[mysqld]一行下面加入兩個(gè)配置參數(shù):
log-slow-queries=/data/mysqldata/slow-query.log
long_query_time=3
log-slow-queries參數(shù)為慢查詢?nèi)罩敬娣诺奈恢茫话氵@個(gè)目錄要有mysql的運(yùn)行帳號(hào)的可寫權(quán)限,一般都將這個(gè)目錄設(shè)置為mysql的數(shù)據(jù)存放目錄;
long_query_time=5中的5表示查詢超過(guò)五秒才記錄;
還可以在my.cnf或者my.ini中添加log-queries-not-using-indexes參數(shù),表示記錄下沒(méi)有使用索引的查詢。
2. 慢查詢分析
我們可以通過(guò)打開(kāi)log文件查看得知哪些SQL執(zhí)行效率低下 ,從日志中,可以發(fā)現(xiàn)查詢時(shí)間超過(guò)5 秒的SQL,而小于5秒的沒(méi)有出現(xiàn)在此日志中。
如果慢查詢?nèi)罩局杏涗泝?nèi)容很多,可以使用mysqldumpslow工具(MySQL客戶端安裝自帶)來(lái)對(duì)慢查詢?nèi)罩具M(jìn)行分類匯總。mysqldumpslow對(duì)日志文件進(jìn)行了分類匯總,顯示匯總后摘要結(jié)果。
進(jìn)入log的存放目錄,運(yùn)行:
[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條數(shù) 日志保存位置
這會(huì)輸出記錄次數(shù)最多的10條SQL語(yǔ)句,其中:
-s:是表示按照何種方式排序,c、t、l、r分別是按照記錄次數(shù)、時(shí)間、查詢時(shí)間、返回的記錄數(shù)來(lái)排序,ac、at、al、ar:表示相應(yīng)的倒敘。
-t:是top n的意思,即為返回前面多少條的數(shù)據(jù)。
-g:后邊可以寫一個(gè)正則匹配模式,大小寫不敏感的。
健哥來(lái)給各位小伙伴舉個(gè)栗子:
/path/mysqldumpslow -s r -t 10 /database/mysql/slow-log
得到返回記錄集最多的10個(gè)查詢。
使用mysqldumpslow命令可以非常明確的得到各種我們需要的查詢語(yǔ)句,對(duì)MySQL查詢語(yǔ)句的監(jiān)控、分析、優(yōu)化是MySQL優(yōu)化非常重要的一步。開(kāi)啟慢查詢?nèi)罩竞?,由于日志記錄操作,在一定程度上?huì)占用CPU資源影響mysql的性能,但是可以階段性開(kāi)啟來(lái)定位性能瓶頸。