慢查询日志用来记录在 MySQL 中执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率低,以便进行优化。
通俗的说,MySQL 慢查询日志是排查问题的 SQL 语句,以及检查当前 MySQL 性能的一个重要功能。如果不是调优需要,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。
默认情况下,慢查询日志功能是关闭的。可以通过以下命令查看是否开启慢查询日志功能。命令和执行过程如下:
mysql> SHOW VARIABLES LIKE 'slow_query%';+---------------------+---------------------------------------------------------------------+| Variable_name | Value |+---------------------+---------------------------------------------------------------------+| slow_query_log | OFF || slow_query_log_file | C:\ProgramData\MySQL\MySQL Server 5.7\Data\LAPTOP-UHQ6V8KP-slow.log |+---------------------+---------------------------------------------------------------------+2 rows in set, 1 warning (0.02 sec)mysql> SHOW VARIABLES LIKE 'long_query_time';+-----------------+-----------+| Variable_name | Value |+-----------------+-----------+| long_query_time | 10.000000 |+-----------------+-----------+1 row in set, 1 warning (0.01 sec)
参数说明如下:
- slow_query_log:慢查询开启状态
- slow_query_log_file:慢查询日志存放的位置(一般设置为 MySQL 的数据存放目录)
- long_query_time:查询超过多少秒才记录
启动和设置慢查询日志
可以通过 log-slow-queries 选项开启慢查询日志。通过 long_query_time 选项来设置时间值,时间以秒为单位。如果查询时间超过了这个时间值,这个查询语句将被记录到慢查询日志。
将 log_slow_queries 选项和 long_query_time 选项加入到配置文件的 [mysqld] 组中。格式如下:
[mysqld]log-slow-queries=dir\filenamelong_query_time=n
其中:
- dir 参数指定慢查询日志的存储路径,如果不指定存储路径,慢查询日志将默认存储到 MySQL 数据库的数据文件夹下。
- filename 参数指定日志的文件名,生成日志文件的完整名称为 filename-slow.log。 如果不指定文件名,默认文件名为 hostname-slow.log,hostname 是 MySQL 服务器的主机名。
- “n”参数是设定的时间值,该值的单位是秒。如果不设置 long_query_time 选项,默认时间为 10 秒。
还可以通过以下命令启动慢查询日志、设置指定时间:
SET GLOBAL slow_query_log=ON/OFF;SET GLOBAL long_query_time=n;
查看慢查询日志
如果你想查看哪些查询语句的执行效率低,可以从慢查询日志中获得信息。和错误日志、查询日志一样,慢查询日志也是以文本文件的形式存储的,可以使用普通的文本文件查看工具来查看。
例 1
开启 MySQL 慢查询日志功能,并设置时间,命令和执行过程如下:
mysql> SET GLOBAL slow_query_log=ON;Query OK, 0 rows affected (0.05 sec)mysql> SET GLOBAL long_query_time=0.001;Query OK, 0 rows affected (0.00 sec)
由于需要演示这里我们将时间设置为了 0.001 秒,执行时间超过 0.001 秒的 SQL 语句将被记录到日志中。
查询 tb_student 表中的数据,SQL 语句和执行过程如下:
mysql> USE test;Database changedmysql> SELECT * FROM tb_student;+----+--------+| id | name |+----+--------+| 1 | Java || 2 | MySQL || 3 | Python |+----+--------+3 rows in set (0.08 sec)
相应的,慢查询日志的部分内容如下:
# Time: 2020-06-01T01:59:18.368780Z# User@Host: root[root] @ localhost [::1] Id: 3# Query_time: 0.006281 Lock_time: 0.000755 Rows_sent: 2 Rows_examined: 1034use test;SET timestamp=1590976758;SHOW VARIABLES LIKE 'slow_query%';
删除慢查询日志
慢查询日志的删除方法与通用日志的删除方法是一样的。可以使用 mysqladmin 命令来删除。也可以使用手工方式来删除。mysqladmin 命令的语法如下:
mysqladmin -uroot -p flush-logs
执行该命令后,命令行会提示输入密码。输入正确密码后,将执行删除操作。新的慢查询日志会直接覆盖旧的查询日志,不需要再手动删除。
数据库管理员也可以手工删除慢查询日志,删除之后需要重新启动 MySQL 服务。
注意:通用查询日志和慢查询日志都是使用这个命令,使用时一定要注意,一旦执行这个命令,通用查询日志和慢查询日志都只存在新的日志文件中。如果需要备份旧的慢查询日志文件,必须先将旧的日志改名,然后重启 MySQL 服务或执行 mysqladmin 命令。
黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括
来源地址:https://blog.csdn.net/Itmastergo/article/details/130922911