MYSQL 慢查詢使用方法
MYSQL慢查詢介紹
分析MySQL語句查詢性能的問題時候,可以在MySQL記錄中查詢超過指定時間的語句,我們將超過指定時間的SQL語句查詢稱爲“慢查詢”。MYSQL自帶的慢查詢分析工具mysqldumpslow可對慢查詢日誌進行分析:主要功能是, 統計sql的執行信息,其中包括 :
- 出現次數(Count),
- 執行最長時間(Time),
- 累計總耗費時間(Time),
- 等待鎖的時間(Lock),
- 發送給客戶端的行總數(Rows),
- 掃描的行總數(Rows),
用戶以及sql語句本身(抽象了一下格式, 比如 limit 1, 20 用 limit N,N 表示).
- 開啓慢SQL的配置
- LIUNX 系統 在mysql配置文件my.cnf中增加
slow_query_log
slow_query_log_file=/usr/local/mysql/data/zhoucentos-slow.log
long_query_time=0.1
- Slow_query_log 這是一個布爾型變量,默認爲真。沒有這變量,數據庫不會打印慢查詢的日誌。
- log-slow-log_file=/export/servers/mysql/bin/mysql_slow.log (指定日誌文件存放位置,可以爲空,系統會給一個缺省的文件host_name-slow.log)
- long_query_time=0.1(記錄超過的時間,默認爲10s),與DBA溝通,性能測試分析問題時可以將該值設爲0.1即100毫秒,這樣分析的粒度更詳細。
備選 :log-queries-not-using-indexes (log下來沒有使用索引的query,可以根據情況決定是否開啓)。log-long-format (如果設置了,所有沒有使用索引的查詢也將被記錄)- Windows下配置:
在my.ini的[mysqld]添加如下語句:
log-slow-queries = E:\web\mysql\log\mysqlslowquery.log
long_query_time = 0.1(其他參數如上)
注: 配置完成後,重新mysql服務配置才能生效。
- 慢查詢開啓與關閉
- 配置完成,連接數據庫檢查慢查詢日誌是否開啓:
命令如下:mysql> show variables like '%slow_query_log%';
-
- 如果沒有打開,請開啓,slow_query_log
開啓命令:mysql> set @@global.slow_query_log = on;
關閉命令:mysql> set @@global.slow_query_log = off;
-
- 再次檢查是否開啓成功
mysql> show variables like '%slow_query_log%';
-
- 檢查目錄中是否生成文件
/mysql目錄下是否存在mysql_slow.log
[root@localhost mysql]# ls -l mysql_slow.log
- 慢查詢日誌分析
3.1 Linux系統:
使用mysql自帶命令mysqldumpslow查看
常用命令,通過 mysqldumpslow –help查看
- -s,是order的排序,主要有 c,t,l,r和ac,at,al,ar,分別是按照query次數,時間,lock的時間和返回的記錄數來排序
- -a,倒序排列
- -t,是top n的意思,即爲返回前面多少條的數據
- -g,後邊可以寫一個正則匹配模式,大小寫不敏感的
例如:mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log
上述命令分別可以看出訪問次數最多的20個sql語句和返回記錄集最多的20個sql。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log這個是按照時間返回前10條裏面含有左連接的sql語句。
圖例中的命令:mysqldumpslow –s at -t 50 host-slow.log 顯示出耗時最長的50個SQL語句的執行信息
以Count: 32 Time=0.26s (8s) Lock=0.00s (0s) Rows=10.0 (320), wos_20120719[wos_20120719]@2host 爲例:
Count: 32 該SQL總共執行32次
Time = 0.26s (8s) 平均每次執行該SQL耗時0.26秒,總共耗時32(次)*0.26(秒)=8秒。
Lock=0.00s(0s) lock時間0秒
Rows =10.0(320) 每次執行SQL影響數據庫表中的10行記錄,總共影響 10(行)*32(次)=320行記錄
3.2 Windows系統:
當你是第一次開啓mysql的慢查詢,會在你指定的目錄下創建這個記錄文件,本文就是mysqlslowquery.log,這個文件的內容大致如下(第一次開啓MYSQL慢查詢的情況下)
E:\web\mysql\bin\mysqld, Version: 5.4.3-beta-community-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time Id Command Argument
可以通過如下的命令來查看慢查詢的記錄數:
mysql> show global status like ‘%slow%’;
+———————+——-+
| Variable_name | Value |
+———————+——-+
| Slow_launch_threads | 0 |
| Slow_queries | 0 |
+———————+——-+