當使用--log-slow-queries[=file_name]選項啟動時,mysqld寫一個包含所有執行時間超過long_query_time秒的SQL語句的日志檔案。獲得初使表鎖定的時間不算作執行時間。
如果沒有給出file_name值, 預設未主機名,字尾為-slow.log。如果給出了檔案名,但不是絕對路徑名,檔案則寫入資料目錄。
語句執行完并且所有鎖釋放後記入慢查詢日志。記錄順序可以與執行順序不相同。
慢查詢日志可以用來找到執行時間長的查詢,可以用于優化。但是,檢查又長又慢的查詢日志會很困難。要想容易些,你可以使用mysqldumpslow指令獲得日志中顯示的查詢摘要來處理慢查詢日志。
在MySQL 5.1的慢查詢日志中,不使用索引的慢查詢同使用索引的查詢一樣記錄。要想防止不使用索引的慢查詢記入慢查詢日志,使用--log-short-format選項。
在MySQL 5.1中,通過--log-slow-admin-statements伺服器選項,你可以請求将慢管理語句,例如OPTIMIZE TABLE、ANALYZE TABLE和 ALTER TABLE寫入慢查詢日志。
用查詢緩存處理的查詢不加到慢查詢日志中,因為表有零行或一行而不能從索引中受益的查詢也不寫入慢查詢日志。
mysqldumpslow 的常用參數如下:
-s 後面接下面的參數表示 mysqldumpslow 結果顯示的順序!
c query執行的次數
t sql執行的時間
l lock鎖表的時間
r sql傳回的行數
ac,at,al,ar,表示倒序排列
-t,是top n,即為傳回前面n條資料。
-g,後邊可以寫一個正則比對模式,大小寫不敏感
顯示執行時間最長的前兩個
[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 )
#顯示次數最多的前兩個
[root@rac3 python]# mysqldumpslow -s c -t 2 /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
[root@rac3 python]#