MySQL慢查詢紀錄檔實操(圖文解析)

2022-09-14 18:01:51

推薦學習:

一、概述

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 : 超過多少秒的查詢就寫入紀錄檔

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慢查詢紀錄檔實操(圖文解析)的詳細內容,更多請關注TW511.COM其它相關文章!