欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 配置Mysql的慢查询日志

配置Mysql的慢查询日志

2025/2/24 5:59:57 来源:https://blog.csdn.net/ju_362204801/article/details/141037131  浏览:    关键词:配置Mysql的慢查询日志

一、什么是Mysql慢查询日志

  • MySQL慢查询日志是MySQL数据库自带的一个功能,用于记录执行时间超过指定阈值的SQL语句,以便于后续的性能优化工作

  • 帮助开发和DBA发现哪些SQL语句需要优化,在哪些地方需要修改,以提高数据库的性能

  • 默认情况下MySQL数据库是不开启慢查询日志的,long_query_time 的默认值为10(即10秒,通常设置为1秒)

二、配置开启Mysql慢查询日志

配置慢查询日志之前,我们可以先查看一下默认情况下慢查询日志的开启情况:

show variables like 'slow%'

09889c4110c3470cb7fd70b2ecf0f6d1.png

可以看到默认情况下 slow_query_log 属性是OFF,处于关闭状态

开启慢查询日志有两种方式

第一种是通过set 语句来开启,这种方式 mysql服务重启的话,配置会失效

第二种是通过配置文件的方式来开启,这种方式是永久生效的,mysql重启也不影响

1、通过set 语句来开启慢查询日志

  • 开启慢查询日志:
set global slow_query_log = on
  • 自定义慢查询日志文件的存放路径:
set global slow_query_log_file = '自定义路径'
  • 设置慢查询时间阈值:

开启了慢查询日志后,还需要设置一下慢查询的时间阈值,就是配置一下你认为多慢才算慢查询

先通过以下语句来看下 这个时间默认是多久:

show variables like '%long%'

20972b4732544552ad136f4c93b61e2e.png

可以看到,long_query_time 属性,默认值为10.000000,表示只记录查询时间在10秒以上的语句

所以这个时间咱们需要自定义的配置一下,那一般配置多久合理呢?

一般情况下,数据不多的话,慢查询的临界值设置为0.02秒比较合理

但是如果数据里比较大的话,一般超过500毫秒,也就是0.5秒就算慢查询

所以,咱们可以通过以下语句,来先把这个时间设置为0.02秒

set long_query_time=0.02

2、通过配置文件的方式来开启慢查询日志

进入mysql的配置文件进行配置

vim /mydata/mysql/conf/my.cnf

把下面的配置复制进去

[mysqld]
slow_query_log = 1
long_query_time = 0.1
slow_query_log_file =/usr/local/mysql/mysql_slow.log

重启mysql生效

docker restart mysql

注意:有可能重启后,发现其他两项都生效了,但是slow_query_log 属性仍然是OFF

这有可能是你自定义指定的慢查询日志文件没读写权限,chmod 赋一下权限就可以了

好了,配置好之后,再通过命令,看下配置好之后的状态

f75aaca0e69147ee878e874f39dbafb3.png

5116bf376a4946ed89735651e12d2215.png

三、模拟慢查询,看记录慢查询日志是否生效

  • 执行sql语句,来模拟慢查询
select sleep(2);
select sleep(5);
  • 进入容器查看 慢查询是否记录到日志文件里了
docker exec -it mysql /bin/bash

使用cat 来查看日志文件

cat /usr/local/mysql/mysql_slow.log

efc9de9044bb4b19b093c67b186c028e.png

可以看到,超过咱们配置的0.1秒的sql语句都会被记录到指定的慢查询日志文件里

下面来简单的解读一下这个日志文件的大概内容

Time: 表示日志记录的时间。格式为 ISO8601 标准的 UTC 时间。

User@Host: 表示执行该SQL语句的用户和主机名。

Id: 表示线程 ID,是一个整数表示。

Query_time: 表示 SQL 语句的执行时间,以秒为单位。

Lock_time: 表示在执行 SQL 语句期间等待锁定资源的时间。如果 SQL 语句没有使用锁,则为 0。

Rows_sent: 表示 SQL 语句返回的行数。

Rows_examined: 表示查询过程中扫描的行数。如果 SQL 语句没有执行查询操作,则该值为 0。

timestamp: 表示该 SQL 语句的执行时间戳,以秒为单位。

sql语句: 实际执行的SQL语句。

 

ok,到这里就配置好了mysql的慢查询日志

记录了慢查询的sql后,就可以定期的去查看,去分析一下这些sql为什么慢的原因,那怎么具体的分析慢查询的sql语句呢?下一篇我会详细讲一下mysql中的explain执行计划,用explain里的内容就可以大致分析出这个sql查询的质量高不高,以及怎么去加索引优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词