首頁  >  文章  >  資料庫  >  MySQL慢查詢日誌實操(圖文解析)

MySQL慢查詢日誌實操(圖文解析)

WBOY
WBOY轉載
2022-09-14 17:28:022449瀏覽

推薦學習:mysql影片教學

#一、概述​​

MySQL的慢查詢日誌是MySQL提供的一種日誌記錄,它用來記錄在MySQL中回應時間超過閥值(long_query_time,單位:秒)的SQL語句。預設情況下,MySQL不啟動慢查詢日誌。本文簡單介紹如何開啟慢查詢日誌,如何用mysqldumpslow分析慢查詢。

二、慢查詢日誌設定

1、暫時設定

暫時開啟慢速查詢日誌(重啟失效)

set global slow_query_log = on;

附註:如果想關閉慢速查詢日誌,只需要執行set global slow_query_log = off; 即可。

臨時慢查詢時間臨界點  查詢時間高於這個臨界點的都會被記錄到慢速查詢日誌中(重啟失效)

set long_query_time = 1;

##設定慢查詢儲存的方式(重啟失效)

set global  log_output = file;

#說明: 可以看到,我這裡設定為了file,就是說我的慢查詢日誌是透過file體現的,預設是none,我們可以設定為table或file,如果是table則慢查詢資訊會儲存到mysql庫下的slow_log表中。

2、查詢慢查詢日誌的開啟狀態與慢查詢日誌儲存的位置

show variables like '%quer%';

參數說明:

  • slow_query_log : 是否已經開啟慢查詢
  • slow_query_log_file : 慢查詢日誌檔案路徑
  • long_query_time :  ##慢速查詢日誌檔案路徑
  • long_query_time :  
超過多少秒的查詢就寫入日誌

log_queries_not_using_indexes 如果值設為ON,則會記錄所有沒有利用索引的查詢(效能最佳化時開啟此項,平常不要開啟)

3、查看存放日誌的形式

show variables like 'log_output';

4、永久開啟慢日誌

修改my.cnf

在設定檔my.cnf(一般為/etc/my.cnf)中的[mysqld] section增加如下參數。

[mysqld]slow_query_log= 1slow_query_log_file= /var/lib/mysql/slow-query.log # 若没有指定,默认名字为hostname_slow.loglong_query_time= 1log_queries_not_using_indexes= 1

其中,slow_query_log = 1,表示開啟慢查詢,0表示關閉

slow_query_log_file,指定慢查詢日誌路徑,需要MySQL對此路徑有寫入權限

long_query_time = 1,表示查詢時間>=1秒才記錄日誌,預設10s

log_queries_not_using_indexes = 1,表示記錄沒有使用索引的SQL 語句

#重啟MySQL服務,重啟MySQL後會看到/var/lib/mysql/slow-query.log檔。

三、慢查詢測試

製造慢查詢並執行。如下:

mysql> select sleep(1);+----------+
| sleep(1) |
+----------+
| 0 |
+----------+
1 row in set (1.00 sec)

慢查詢日誌

#開啟慢查詢日誌檔。可以看到上述慢查詢的SQL語句被記錄到日誌中。

四、慢查詢分析工具

mysqldumpslow

mysqldumpslow是MySQL自帶的分析慢查詢的工具。該工具是Perl腳本。

常用參數如下:
  • -s:
  • 排序方式,值如下##c:
  • 查詢次數
  • t:
  • 查詢時間
  • l:
  • 鎖定時間
  • r:
  • 傳回記錄
  • ac:
  • 平均查詢次數
  • al:
  • 平均鎖定時間
  • ##ar:平均傳回記錄書
  • at:平均查詢時間
  • -t:topN查詢
  • -g :正規表示式

取得最多訪問次數的5個SQL語句:

依照時間排的top 5個SQL語句

$ mysqldumpslow -s t -t 5 /var/lib/mysql/slow-query.log

依照時間排序且含有'like'的top 5個SQL語句

$ mysqldumpslow -s t -t 3 -g "like" /var/lib/mysql/slow-query.log

五、MySQL 清理slowlog方法

SET GLOBAL slow_query_log = 'OFF';
ALTER TABLEmysql.slow_log RENAME mysql.slow_log_drop;
CREATE TABLE mysql.slow_log LIKEmysql.slow_log_drop;
SET GLOBAL slow_query_log = 'ON';
DROP TABLE mysql.slow_log_drop;

推荐学习:mysql视频教程

以上是MySQL慢查詢日誌實操(圖文解析)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除