慢查詢日誌

慢查詢日誌mysql

(1)是什麼sql

  • MySQL的慢查詢日誌是MySQL提供的一種日誌記錄,它用來記錄在MySQL中響應時間超過閥值的語句,具體指運行時間超過long_query_time值的SQL,則會被記錄到慢查詢日誌中。
  • 具體指運行時間超過long_query_time值的SQL,則會被記錄到慢查詢日誌中。long_query_time的默認值爲10,意思是運行10秒以上的語句。
  • 由他來查看哪些SQL超出了咱們的最大忍耐時間值,好比一條sql執行超過5秒鐘,咱們就算慢SQL,但願能收集超過5秒的sql,結合以前explain進行全面分析。

(2)怎麼玩數據庫

  ① 說明服務器

  默認狀況下,MySQL數據庫沒有開啓慢查詢日誌,須要咱們手動來設置這個參數。
  固然,若是不是調優須要的話,通常不建議啓動該參數,由於開啓慢查詢日誌會或多或少帶來必定的性能影響。慢查詢日誌支持將日誌記錄寫入文件session

  ②查看是否開啓及如何開啓工具

  默認——SHOW VARIABLES LIKE '%slow_query_log%';性能

  默認狀況下slow_query_log的值爲OFF,表示慢查詢日誌是禁用的,能夠經過設置slow_query_log的值來開啓
  SHOW VARIABLES LIKE '%slow_query_log%';ui

  

  開啓——set global slow_query_log=1;spa

  使用set global slow_query_log=1開啓了慢查詢日誌只對當前數據庫生效,若是MySQL重啓後則會失效。3d

  

  

  全局變量設置,對當前鏈接不影響

  

  對當前鏈接馬上生效

  

  若是要永久生效,就必須修改配置文件my.cnf(其它系統變量也是如此)
  修改my.cnf文件,[mysqld]下增長或修改參數
  slow_query_log 和slow_query_log_file後,而後重啓MySQL服務器。也即將以下兩行配置進my.cnf文件
  slow_query_log =1
  slow_query_log_file=/var/lib/mysql/atguigu-slow.log
  關於慢查詢的參數slow_query_log_file ,它指定慢查詢日誌文件的存放路徑,系統默認會給一個缺省的文件host_name-slow.log(若是沒有指定參數slow_query_log_file的話)

  ③ 那麼開啓了慢查詢日誌後,什麼樣的SQL纔會記錄到慢查詢日誌裏面呢?

  這個是由參數long_query_time控制,默認狀況下long_query_time的值爲10秒,
  命令:SHOW VARIABLES LIKE 'long_query_time%';

  可使用命令修改,也能夠在my.cnf參數裏面修改。
  假如運行時間正好等於long_query_time的狀況,並不會被記錄下來。也就是說,
  在mysql源碼裏是判斷大於long_query_time,而非大於等於

  ④ Case

  • 查看當前多少秒算慢——SHOW VARIABLES LIKE 'long_query_time%';
  • 設置慢的闕值時間——爲何設置後看不出變化?

    使用命令 set global long_query_time=1  修改成闕值到1秒鐘的就是慢sql

    

    修改後發現long_query_time並無改變。兩個解決方案:

    1) 須要從新鏈接或新開一個會話才能看到修改值。 SHOW VARIABLES LIKE 'long_query_time%';

    2) 或者經過set session long_query_time=1來改變當前session變量;

      

  • 記錄慢SQL並後續分析

  查詢當前系統中有多少條慢查詢記錄

  show global status like '%Slow_queries%';

  

  ⑤ 配置版

【mysqld】下配置:
 
slow_query_log=1;
slow_query_log_file=/var/lib/mysql/atguigu-slow.log
long_query_time=3;
log_output=FILE

  (3)日誌分析工具mysqldumpslow

    查看mysqldumpslow的幫助信息:mysqldumpslow --help

    

 1 s: 是表示按照何種方式排序
 2 c: 訪問次數
 3 l: 鎖定時間
 4 r: 返回記錄
 5 t: 查詢行數
 6 al:平均鎖定時間
 7 ar:平均返回記錄數
 8 at:平均查詢時間
 9 t:即爲返回前面多少條的數據
10 g:後邊搭配一個正則匹配模式,大小寫不敏感的

  工做經常使用參考

獲得返回記錄集最多的10個SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log
 
獲得訪問次數最多的10個SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/atguigu-slow.log
 
獲得按照時間排序的前10條裏面含有左鏈接的查詢語句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/atguigu-slow.log
 
另外建議在使用這些命令時結合 | 和more 使用 ,不然有可能出現爆屏狀況
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log | more
相關文章
相關標籤/搜索