慢SQL监控

前言: mysql可以记录用户执行的sql:记录到文件、表格 ,mysql可以定义执行多少时间以上得sql属于慢查询,也会根据配置,记录相关信息到文件、表格

背景说明:

公司想监控记录每天执行了哪些sql,哪些sql是慢查询,然后去优化sql

技术说明:

其实只要搞清楚了mysql怎样记录执行sql的

怎样记录慢查询的即可

技术细节:

  • 进入MySql 查询是否开了慢查询

show variables like 'slow_query%'

参数说明:

  • slow_query_log 慢查询开启状态 OFF 未开启 ON 为开启

  • slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)默认为localhost-slow.log

  • 查看慢查询超时时间

show variables like 'long%';

参数说明:

  • long_query_time 查询超过多少秒才记录 默认10秒 修改为1秒

  • set global long_query_time=1; 修改之后,先关闭数据库连接,再重新连接,再次查询就可以看到实际上是修改了的。

  • 修改方法一(不推荐)

方法一:优点临时开启慢查询,不需要重启数据库 缺点:MySql 重启慢查询失效

默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,可以通过设置slow_query_log的值来开启,如下所示开启慢查询日志,1表示开启,0表示关闭。

输入 语句修改(重启后失效,建议在/etc/my.cnf中修改永久生效)

再次查看

  • 修改方法二

修改 MySql 慢查询,通过修改my.cnf修改配置参数,设置之后,重启永久生效

  • vi /application/mysql/my.cnf ,找到 [mysqld] 下面添加如下参数:

修改完重启MySQL

参数说明:

general_log=1 #开启mysql执行sql的日志

general_log_file=/log/general.log #将mysql执行sql日志记录到指定文件中

slow_query_log=1 #开启mysql慢sql的日志

slow_query_log_file=/log/slow.log #将慢查询日志记录到指定文件中

log_output=table,File #日志输出会写表,也会写日志文件,为了便于程序去统计,所以最好写表

long_query_time=1 #设置mysql的慢查询为超过1s的查询

#如果没有配置general_log_file,那么general_log就只会写表了

#如果没有配置slow_query_log_file,那么slow_query_log就只会写表了

  • 查看、测试

插入一条测试慢查询

查看慢查询日志

通过MySQL命令查看有多少慢查询

日志分析工具mysqldumpslow

在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow

如:

Last updated

Was this helpful?