1. 简介
慢日志全称为慢查询日志(Slow Query Log),MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
2. 配置详解
slow_query_log = on # 是否启用慢查询日志,默认为off,可设置为off,on,on表示开启。
slow_query_log_file = F:/log.txt # 新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。
log-slow-queries = F:/log.txt # 旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。
long_query_time = 1 # 慢查询执行时间阈值,超过此时间会记录,默认为10,单位为s。
log_output = file # 慢查询日志输出目标,默认为file,即输出到文件,可为table、file。
log_timestamps = UTC # 主要是控制 error.log、slow.log、genera.log 日志文件中的显示时区,默认使用UTC时区,建议改为 SYSTEM 系统时区。
log_queries_not_using_indexes = off # 是否记录所有未使用索引的查询语句,默认为off。
min_examined_row_limit = 0 # 对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中,默认为0。
log_slow_admin_statements = off # 慢速管理语句是否写入慢日志中,管理语句包含 alter table、create index 等,默认为 off 即不写入。
mysqld restart # 配置完成,重新启动数据库
3. 慢日志实例
命令行开启慢日志
mysql> show variables like 'slow_query%'; # 查看当前慢查询状态(默认为关闭)
+---------------------+------------+
| Variable_name | Value |
+---------------------+------------+
| slow_query_log | ON |
| slow_query_log_file | F:\log.txt |
+---------------------+------------+
2 rows in set, 7 warnings (0.00 sec)
mysql> set global slow_query_log='ON'; # 开启慢日志查询
Query OK, 0 rows affected (0.45 sec)
mysql> set global long_query_time = 1; # 设置慢查询SQL执行记录时间为1秒
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'slow_query%'; # 查看慢日志开启结果
+---------------------+------------+
| Variable_name | Value |
+---------------------+------------+
| slow_query_log | ON |
| slow_query_log_file | F:\log.txt |
+---------------------+------------+
2 rows in set, 7 warnings (0.00 sec)
mysql> show variables like 'long_query_time'; # 查看SQL超时时间
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set, 7 warnings (0.00 sec)
通过MySQL配置文件开启慢查询(永久生效)
slow_query_log = ON
long_query_time = 1
slow_query_log_file = F:\log.txt
查询
为了明显的效果,使用数据蠕虫添加了 2000000 条数据。
mysql> select * from mytable where name='张三';
+---------+--------+------+
| id | name | age |
+---------+--------+------+
| 2490317 | 张三 | 18 |
+---------+--------+------+
1 row in set (2.24 sec)
4. 日志记录结果
F:\phpstudy_pro\COM\..\Extensions\MySQL5.7.26\\bin\mysqld.exe, Version: 5.7.26-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time Id Command Argument
# Time: 2022-08-23T08:58:58.005826Z
# User@Host: root[root] @ localhost [::1] Id: 4
# Query_time: 2.241859 Lock_time: 0.446724 Rows_sent: 1 Rows_examined: 2097154
use admin;
SET timestamp=1661245138;
select * from mytable where name='张三';
Time : SQL执行日期时间
User :执行SQL的用户
Query_time :SQL执行时间
Lock_time :SQL上锁时间
Rows_sent :查询到的SQL总条数
Rows_examined :总计查询条数