顧名思義,慢查詢日志中記錄的是執行時間較長的query,也就是我們常說的slowquery,通過設--log-slow-queries[=file_name]來打開該功能並設置記錄位置和文件名。慢查詢日志采用的是簡單的文本格式,可以通過各種文本編輯器查看其中的內容。其中記錄了語句執行的時刻,執行所消耗的時間,執行用戶,連接主機等相關信息。MySQL 還提供了專門用來分析滿查詢日志的工具程序mysqlslowdump,用來幫助數據庫管理人員解決可能存在的性能問題。
1、配置慢查詢
Linux:
在mysql配置文件my.cnf中增加:log-slow-queries=/opt/data/slowquery.log (指定日志文件存放位置,可以為空,系統會給一個缺省的文件host_name-slow.log)
long_query_time=2 (記錄超過的時間,默認為10s)
log-queries-not-using-indexes (log下來沒有使用索引的query,可以根據情況決定是否開啟)
Windows:
在my.ini的[mysqld]添加如下語句:log-slow-queries = E:\web\mysql\log\mysqlslowquery.log
long_query_time = 2(其他參數如上)
慢查詢的配置也可以通過執行命令來設置,這樣就不用重啟mysql服務了。
set global slow_query_log=on;
set global long_query_time=1;#設置記錄查詢超過多長時間的sql
set global slow_query_log_file=‘/opt/data/slow_query.log’;#設置mysql慢查詢日志路徑,此路徑需要有寫權限
這種方式不用重啟mysql服務。
2、查詢mysql慢查詢狀態
SHOW VARIABLES LIKE '%query%';
使用這個語句可以看到當前mysql慢查詢是否開啟,以及mysql的慢查詢日志文件在哪。
slow_query_log #是否開啟慢查詢
slow_query_log_file #日志的存放位置
long_query_time #超過多少秒的查詢就寫入日志
3、解析mysql慢查詢日志
使用mysqldumpslow命令可以解析mysql慢查詢日志。
Mysqldumpslow命令參數如下:
-s,是表示按照何種方式排序,c、t、l、r分別是按照記錄次數、時間、查詢時間、返回的記錄數來排序,ac、at、al、ar,表示相應的倒敘;
-t,是top n的意思,即為返回前面多少條的數據;
-g,后邊可以寫一個正則匹配模式,大小寫不敏感的;
比如說要按照sql執行時間最長的前20條sql
mysqldumpslow -s t -t 20 -g 'select'/opt/data/slowquery_2016050921.log
得到按照時間排序的前10條里面含有左連接的查詢語句。
mysqldumpslow -s t -t 10 -g 'left join'/opt/data/slowquery_2016050921.log