MYSQL慢查詢介紹

MYSQL 慢查詢使用方法

MYSQL慢查詢介紹

分析MySQL語句查詢性能的問題時候,可以在MySQL記錄中查詢超過指定時間的語句,我們將超過指定時間的SQL語句查詢稱爲“慢查詢”。MYSQL自帶的慢查詢分析工具mysqldumpslow可對慢查詢日誌進行分析:主要功能是, 統計sql的執行信息,其中包括 :

  • 出現次數(Count),
  • 執行最長時間(Time),
  • 累計總耗費時間(Time),
  • 等待鎖的時間(Lock),
  • 發送給客戶端的行總數(Rows),
  • 掃描的行總數(Rows),

用戶以及sql語句本身(抽象了一下格式, 比如 limit 1, 20 用 limit N,N 表示).

  1. 開啓慢SQL的配置
    1. 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 (如果設置了,所有沒有使用索引的查詢也將被記錄)
    1. Windows下配置:

在my.ini的[mysqld]添加如下語句:
log-slow-queries = E:\web\mysql\log\mysqlslowquery.log
long_query_time = 0.1(其他參數如上)

 

注: 配置完成後,重新mysql服務配置才能生效。

 

  1. 慢查詢開啓與關閉
    1. 配置完成,連接數據庫檢查慢查詢日誌是否開啓:

命令如下:mysql> show variables like '%slow_query_log%';

    1. 如果沒有打開,請開啓,slow_query_log

開啓命令:mysql> set @@global.slow_query_log = on;

關閉命令:mysql> set @@global.slow_query_log = off;

    1. 再次檢查是否開啓成功

mysql> show variables like '%slow_query_log%';

    1. 檢查目錄中是否生成文件

 /mysql目錄下是否存在mysql_slow.log
[root@localhost mysql]# ls -l mysql_slow.log

  1. 慢查詢日誌分析

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 |
+———————+——-+

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章