慢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?

