摘要: 前言 資料庫日誌記錄了使用者對資料庫的各種操作及資料庫發生的各種事件。能幫助資料庫管理員追蹤、分析問題。mysql提供了錯誤日誌、二進位制日誌、查詢日誌、慢查詢日誌。 mysql的慢查詢日誌是mysql提供的一種日誌記錄,它用來記錄在mysql中響應時間超過閥值(long_query_time,單位:秒)的sql語句。
前言資料庫日誌記錄了使用者對資料庫的各種操作及資料庫發生的各種事件。能幫助資料庫管理員追蹤、分析問題。mysql提供了錯誤日誌、二進位制日誌、查詢日誌、慢查詢日誌。
mysql的慢查詢日誌是mysql提供的一種日誌記錄,它用來記錄在mysql中響應時間超過閥值(long_query_time,單位:秒)的sql語句。預設情況下,mysql不啟動慢查詢日誌。本文簡單介紹如何開啟慢查詢日誌,如何用mysqldumpslow分析慢查詢。
開啟慢查詢日誌
修改my.cnf
在配置檔案my.cnf(一般為/etc/my.cnf)中的[mysqld] section增加如下引數。
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow-query.log # 若沒有指定,預設名字為hostname_slow.log
long_query_time = 1
log_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服務
# 重啟
$ sudo service mysqld restart
# 重啟後程序如下
root 22373 0.0 0.0 66064 1424 pts/3 s 16:59 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql
mysql 22721 0.3 0.5 890996 467040 pts/3 sl 16:59 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/var/lib/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
重啟mysql後會看到/var/lib/mysql/slow-query.log檔案。
檢查引數
通過如下命令可以檢查上述引數配置情況。
mysql> show variables like 'slow_query%';
| variable_name | value |
| slow_query_log | on |
| slow_query_log_file | /var/lib/mysql/slow-query.log |
2 rows in set (0.00 sec)
mysql> show variables like 'long_query_time';
| variable_name | value |
| long_query_time | 1.000000 |
1 row in set (0.00 sec)
測試慢查詢
製造慢查詢並執行。如下。
mysql> select sleep(1);
| sleep(1) |
| 0 |
1 row in set (1.00 sec)
慢查詢日誌
開啟慢查詢日誌檔案。可以看到上述慢查詢的sql語句被記錄到日誌中。
# time: 180620 17:13:06
# user@host: apsara[apsara] @ dc1487859883577.et2sqa [11.239.51.96] id: 3
# query_time: 1.000246 lock_time: 0.000000 rows_sent: 1 rows_examined: 0
set timestamp=1529485986;
select sleep(1);
慢查詢分析工具
mysqldumpslow
mysqldumpslow是mysql自帶的分析慢查詢的工具。該工具是perl指令碼。
常用引數如下。
-s:排序方式,值如下
c:查詢次數
t:查詢時間
l:鎖定時間
r:返回記錄
ac:平均查詢次數
al:平均鎖定時間
ar:平均返回記錄書
at:平均查詢時間
-t:top n查詢
-g:正規表示式
例子我們執行了多次類似如下的查詢。
select * from db_user where name like 'zb%';
select * from db_user where name like 'aaa%';
select * from db_user where name like 'bc%';
獲取訪問次數最多的5個sql語句
$ mysqldumpslow -s c -t 5 /var/lib/mysql/slow-query.log
reading mysql slow query log from /var/lib/mysql/slow-query.log
count: 15 time=0.00s (0s) lock=0.00s (0s) rows=0.0 (0), apsara[apsara]@dc1487859883577.et2sqa
# query_time: n.n lock_time: n.n rows_sent: n rows_examined: n
set timestamp=n;
select * from db_user where name like 's'
count: 1 time=0.00s (0s) lock=0.00s (0s) rows=0.0 (0), apsara[apsara]@dc1487859883577.et2sqa
# query_time: n.n lock_time: n.n rows_sent: n rows_examined: n
use test;
set timestamp=n;
select * from db_user where name like 's'
按照時間排的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不啟動慢查詢日誌。若要檢查慢查詢,需要我們手動設定這個引數。一般情況下,若非調優需要,不建議啟動該引數,因為開啟慢查詢日誌或多或少會帶來一定的效能影響。慢查詢日誌支援將日誌記錄寫入檔案,也支援將日誌記錄寫入資料庫表。
如何開啟 mysql 慢查詢日誌
使用 mysql 命令方式開啟 檢視慢查詢日誌是否開啟 show variables like slow query log variable name value slow query log off 1 row in set 0.06 sec 與之相關的配置引數 slow query log 慢...
如何開啟MySQL慢查詢日誌
資料庫日誌記錄了使用者對資料庫的各種操作及資料庫發生的各種事件。能幫助資料庫管理員追蹤 分析問題。mysql提供了錯誤日誌 二進位制日誌 查詢日誌 慢查詢日誌。mysql的慢查詢日誌是mysql提供的一種日誌記錄,它用來記錄在mysql中響應時間超過閥值 long query time,單位 秒 的...
mysql如何開啟慢日誌查詢
記一次如何開啟mysql的慢查詢日誌 如果是第一次開啟慢查詢日誌,建議先看一下文章中部的可能遇到的問題,畢竟走在前人的屍體上進步的話,可以少踩很多坑。1.linux下如何開啟 1.1在linux下安裝好mysql後輸入mysql u p 進入mysql 指的是mysql的賬戶密碼 選著資料庫。1.2...