mysql开启慢查询日志_慢查询

前言:mysql数据库默认没有开启慢查询日志,需要我们手动去设置这个参数;

慢查询,它的主要作用是定位那些执行时间比较长的sql语句,运行时间超过long_query_time值的SQL(long_query_time默认值是10秒),则会记录到慢查询日志中,我们通过记录sql执行时间超过某个阈值的sql日志,快速定位有问题的语句,为我们sql优化做参考;

如果不是调优需要的话,生产环境一般不建议启动该参数,因为开启慢查询日志或多或少会带来一定的性能的影响。

一、开启慢查询日志

1.临时开启慢查询日志

临时开启慢查询日志,数据库重启后失效

进入数据库查询是否开启慢查询功能

[root@localhost ~]# docker exec -it mysql-test /bin/bash

bash-4.2# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.40 MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

#show variables like 'slow_query%';
mysql> show variables like 'slow_query%';
+---------------------+--------------------------------------+
| Variable_name | Value |
+---------------------+--------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/ece19cd91862-slow.log |
+---------------------+--------------------------------------+
2 rows in set (0.36 sec)


mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
1 row in set (0.00 sec)



参数说明:
slow_query_log :慢查询开启的状态,ON 开启 OFF未开启
slow_query_log_file:慢查询日志存放的位置(这个目录需要mysql的运行账号的可读可写的权限,一般设置为mysql的数据存放目录)
long_query_time : 查询超过多少秒才记录

开启慢查询

mysql> set global slow_query_log=1;

Query OK, 0 rows affected (0.47 sec)

mysql> set global long_query_time=1;

Query OK, 0 rows affected (0.00 sec)

退出登录数据库再登录查看是否生效

mysql> show variables like 'slow_query_log%';

+---------------------+--------------------------------------+

| Variable_name | Value |

+---------------------+--------------------------------------+

| slow_query_log | ON |

| slow_query_log_file | /var/lib/mysql/ece19cd91862-slow.log |

+---------------------+--------------------------------------+

2 rows in set (0.00 sec)

mysql开启慢查询日志_慢查询_02

2.永久开启慢查询日志

上面已经配置临时慢查询日志的,先重启数据库,然后重新配置(测试环境)

修改my.cnf,在 [mysqld] 添加下面配置

slow_query_log=1

slow_query_log_file=/var/lib/mysql/slow-log.log

long_query_time=1

然后重新重启服务

3.慢查询日志内容解释

mysql开启慢查询日志_mysql_03

第一行记录的是该条sql执行的时刻

第二行记录的是执行该局域的用户和ip以及链接id

第3行字段记录如下

Query_time: duration 语句执行时间,以秒为单位。

Lock_time: duration 获取锁的时间(以秒为单位)。

Rows_sent: N 发送给 Client 端的行数。

Rows_examined: N 服务器层检查的行数(不计算存储引擎内部的任何处理)。

延伸点

查询当前系统中有多少条慢查询日志记录show GLOBAL STATUS LIKE '%slow_queries%';



好好吃饭呀