前言:mysql数据库默认没有开启慢查询日志,需要我们手动去设置这个参数;
慢查询,它的主要作用是定位那些执行时间比较长的sql语句,运行时间超过long_query_time值的SQL(long_query_time默认值是10秒),则会记录到慢查询日志中,我们通过记录sql执行时间超过某个阈值的sql日志,快速定位有问题的语句,为我们sql优化做参考;
如果不是调优需要的话,生产环境一般不建议启动该参数,因为开启慢查询日志或多或少会带来一定的性能的影响。
一、开启慢查询日志
1.临时开启慢查询日志
临时开启慢查询日志,数据库重启后失效
进入数据库查询是否开启慢查询功能
开启慢查询
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)
2.永久开启慢查询日志
上面已经配置临时慢查询日志的,先重启数据库,然后重新配置(测试环境)
修改my.cnf,在 [mysqld] 添加下面配置
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slow-log.log
long_query_time=1
然后重新重启服务
3.慢查询日志内容解释
第一行记录的是该条sql执行的时刻
第二行记录的是执行该局域的用户和ip以及链接id
第3行字段记录如下
Query_time: duration 语句执行时间,以秒为单位。
Lock_time: duration 获取锁的时间(以秒为单位)。
Rows_sent: N 发送给 Client 端的行数。
Rows_examined: N 服务器层检查的行数(不计算存储引擎内部的任何处理)。
延伸点
查询当前系统中有多少条慢查询日志记录show GLOBAL STATUS LIKE '%slow_queries%';
好好吃饭呀