Mysql的慢日志查询

概念

Mysql记录所有执行时间超过(由long_query_time控制的)指定值的sql语句,慢查询日志就是记录这些sql语句的日志文件。

配置文件

Linux下是my.cnf文件,Windows下是my.ini文件,与存放数据的Data文件夹的路径一样。

Data文件夹路径:

mysql> show global variables like "%datadir%";
+---------------+---------------------------------------------+
| Variable_name | Value                                       |
+---------------+---------------------------------------------+
| datadir       | C:\ProgramData\MySQL\MySQL Server 5.7\Data\ |
+---------------+---------------------------------------------+
1 row in set, 1 warning (0.31 sec)

 

配置项

log-output -- 慢日志保存,取值包括:'FILE'(文件)、'TABLE'(表)、'FILE,TABLE'(文件和表都开启),默认值是'FILE'
slow-query-log  -- 取值1/0,表示开启/停止慢日志查询
slow_query_log_file -- 慢日志文件路径,默认在Data文件下
long_query_time -- 慢日志阈值,以秒为单位,默认为10
log_queries_not_using_indexes -- 是否将未使用索引的sql记录到慢日志文件中

修改配置项

1)、直接打开my.ini,新增/修改配置项的值,然后需要重启服务,永久生效

改成如下所示(超过0.05秒的sql记录下来),并删除原来的日志文件(DESKTOP-PS154P1-slow.log)

【Windows10下启动和关闭mysql服务】

2)、也可以直接修改配置项,比如下面修改long_query_time的值,需要重启打开一个窗口(会话)才会生效,但是部分配置项(eg:慢日志文件路径)直接修改并不会生效,所以不建议直接;

show variables  like '%配置项%';  --  查看配置项信息, 完全匹配可以不加%
set global 配置项 = 值;     -- 重新设置值

测试(制造点假数据,模拟下慢日志被记录下来的情况)

1)、删除索引

2、复制数据

表user_oper_record是记录user的操作记录,由触发器完成,感兴趣的可以看下【简单了解Mysql中的触发器】

执行下面两行命令

select * from user u, user_oper_record r where u.phone = r.phone;
select count(*) from user u, user_oper_record r where u.phone = r.phone;

可以发现生成了su-slow.log文件,且第一条命令执行了0.11S(>0.05S),被记录了下来,第二条命令执行0.03S(<0.03S),没有被记录下来。

 mysqldumpslow工具

当项目足够大,慢日志足够多时(这里设置long_query_time = 0,记录所有sql),分析日记会非常费时费力。MySQL提供了日志分析工具mysqldumpslow帮助我们快速查询到想要查询的慢日志。

mysqldumpslow的使用需要【安装ActivePerl】

安装完

perl mysqldumpslow.pl --help  -- 查看相关命令

其中值得注意点的命令是

  -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default
                al: average lock time -- 平均锁的时间
                ar: average rows sent -- 平均数据数
                at: average query time -- 平均查询时间
                 c: count -- 总次数
                 l: lock time -- 锁的时间
                 r: rows sent -- 数据总数
                 t: query time -- 查询时间

完整命令,将su-slow.log文件复制到了桌面

perl mysqldumpslow.pl -s t -t 记录数 日志路径  -- -t 记录数 : 取记录的数量 

 

 

如果有写的不对的地方,请大家多多批评指正,非常感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值