|
在mysql中slow query log是一個非常重要的功能,我們可以開啟mysql的slow query log功能,這樣就可以分析每條sql執(zhí)行的狀態(tài)與性能從而進(jìn)行優(yōu)化了。
一、慢查詢?nèi)罩?配置
開啟慢查詢?nèi)罩?, 配置樣例:
/etc/mysql/my.cnf [mysqld] log-slow-queries
在 my.cnf 配置文件中增加上述配置項并重啟 mysql 服務(wù),這時 mysql 慢查詢功能生效。慢查詢 日志將寫入?yún)?shù) DATADIR (數(shù)據(jù)目錄:/var/lib/mysql) 指定的路徑下,默認(rèn)文件名是 host_name-slow.log 。 和錯誤日志、查詢?nèi)罩疽粯?,慢查詢?nèi)罩居涗浀母袷揭彩羌兾谋?,可以被直接讀取。下例中演示了慢查詢?nèi)罩镜脑O(shè)置和讀取過程。
1 )首先查詢一下 long_query_time 的值 。
mysql> show variables like 'long%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | long_query_time | 10 | +-----------------+-------+ 1 row in set (0.00 sec)
( 2 )為了方便測試,將修改慢查詢時間為 5 秒。
mysql> set long_query_time=1; Query OK, 0 rows affected (0.02 sec)
以上操作只限于當(dāng)前有效,關(guān)閉服務(wù)器得重新設(shè)置。下面的方法可直接寫入my.cnf
log-slow-queries=/var/lib/mysql/slowquery.log
long_query_time=1
二、mysqldumpslow 的常用參數(shù)如下:
-s 后面接下面的參數(shù)表示 mysqldumpslow 結(jié)果顯示的順序! c query執(zhí)行的次數(shù) t sql執(zhí)行的時間 l lock鎖表的時間 r sql返回的行數(shù) ac,at,al,ar,表示倒序排列 -t,是top n,即為返回前面n條數(shù)據(jù)。 -g,后邊可以寫一個正則匹配模式,大小寫不敏感 顯示執(zhí)行時間最長的前兩個 [root@rac3 python]# mysqldumpslow -s t -t 2 /opt/mysql/data/slowquery.log Reading mysql slow query log from /opt/mysql/data/slowquery.log Count: 2 Time=412.54s (825s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@localhost select count(N) from sbtest ,t1 where t1.c=sbtest.c Count: 1 Time=778.20s (778s) Lock=0.00s (0s) Rows=1.0 (1), root[root]@localhost select count(N) from sbtest where sbtest.id not in ( select id from t1 ) #顯示次數(shù)最多的前兩個 [root@rac3 python]# mysqldumpslow -s c -t 2 /opt/mysql/data/slowquery.log Reading mysql slow query log from /opt/mysql/data/slowquery.log Count: 12 Time=0.00s (0s) Lock=0.00s (0s) Rows=1.0 (12), root[root]@localhost select count(N) from tab_1 Count: 2 Time=412.54s (825s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@localhost select count(N) from sbtest ,t1 where t1.c=sbtest.c [root@rac3 python]#
|