MySql慢日志相关配置与解读

1.命令行登陆MySql

进入mysql目录,执行mysql -uroot -pXXX

查看慢日志开启状态;

执行show avriables like'%slow%';

1)slow_query_log的值为ON为开启慢查询日志,OFF则为关闭慢查询日志。

(2)slow_query_log_file 的值是记录的慢查询日志到文件中(注意:默认名为主机名.log,慢查询日志是否写入指定文件中,需要指定慢查询的输出日志格式为文件,相关命令为:show variables like ‘%log_output%’;去查看输出的格式)。

(3)long_query_time 指定了慢查询的阈值,即如果执行语句的时间超过该阈值则为慢查询语句,默认值为10秒。

(4)log_queries_not_using_indexes 如果值设置为ON,则会记录所有没有利用索引的查询(注意:如果只是将log_queries_not_using_indexes设置为ON,而将slow_query_log设置为OFF,此时该设置也不会生效,即该设置生效的前提是slow_query_log的值设置为ON),一般在性能调优的时候会暂时开启。

执行命令:show variables like'%slow%';


开启慢日志命令:set global slow_query_log=ON;

show variables like “%long%”; #查看MySQL慢查询时间设置,默认10秒

set global long_query_time=5; #修改为记录5秒内的查询

select sleep(6); #测试MySQL慢查询

show variables like ‘%slow%’; #查看MySQL慢查询日志路径

查看慢日志阀值:

show variables like'%long%';

使用mysqldumpslow分析慢查询日志;

Mysqldumpslow的用法汇总

 

mysqldumpslow --help可显示其参数的使用


经常使用的参数:

-s,是order的顺序

al   平均锁定时间

ar   平均返回记录时间

at   平均查询时间(默认)

c    计数

l    锁定时间

r    返回记录

t    查询时间

 


-t,是top n的意思,即为返回前面多少条的数据

-g,后边可以写一个正则匹配模式,大小写不敏感的

例子:

mysqldumpslow -t 10 -s t -g “left join” host-slow.log

使用mysqldumpslow的分析结果不会显示具体完整的sql语句,说明:


1:假如真正的sql语句如下:

SELECT * FROM sms_send WHERE service_id=10 GROUP BY content LIMIT 0, 1000;

 

mysqldumpslow显示的结果会是:

Count: 1  Time=1.91s (1s)  Lock=0.00s (0s)  Rows=1000.0 (1000), vgos_dba[vgos_dba]@[10.130.229.196]
SELECT * FROM sms_send WHERE service_id=N GROUP BY content LIMIT N, N;

 

2:如果我们再执行一条

SELECT * FROM sms_send WHERE service_id=20 GROUP BY content LIMIT 10000, 1000;


mysqldumpslow显示的结果会是:

Count: 2  Time=2.79s (5s)  Lock=0.00s (0s)  Rows=1.0 (2), vgos_dba[vgos_dba]@[10.130.229.196]

SELECT * FROM sms_send WHERE service_id=N GROUP BY content LIMIT N, N;

 

虽然这两条语句条件不一样,

1:一个是server_id=10,一个是server_id=20

2:一个是LIMIT 0, 1000,一个是LIMIT 10000, 1000

但是mysqldumpslow分析会认为这是一种类型的语句,会合并显示。

 

3:假设我们执行

SELECT * FROM sms_send WHERE service_id<=10 GROUP BY content LIMIT 0, 1000;


执行mysqldumpslow结果是

Count: 1  Time=2.91s (2s)  Lock=0.00s (0s)  Rows=1000.0 (1000), vgos_dba[vgos_dba]@[10.130.229.196]

SELECT * FROM sms_send WHERE service_id<=N GROUP BY content LIMIT N, N;


可以看出它和上面我们写的sql语句是两种类型

mysqldumpslow的分析结果

Count会告诉我们这种类型的语句执行了几次

Time会告诉我们这种类型的语句执行的最大时间

Time=2.79s (5s)中(5s)是指这类型的语句执行总共花费的时间

例:

Count: 2  Time=2.79s (5s)  Lock=0.00s (0s)  Rows=1.0 (2), vgos_dba[vgos_dba]@[10.130.229.196]

 

告诉我们执行了2

最大时间是2.79s

总共花费时间5s

lock时间0s

单次返回的结果数是1条记录

2次总共返回2条记录


mysqldumpslow -s t -t 10 slow.log

查询的结果是10条执行时间最慢的sql语句,其中-s t是指此类类型的语句的执

行总时长


Count: 1  Time=2.91s (2s)  Lock=0.00s (0s)  Rows=1000.0 (1000), vgos_dba[vgos_dba]@[10.130.229.196]


Count: 2  Time=2.79s (5s)  Lock=0.00s (0s)  Rows=1.0 (2), vgos_dba[vgos_dba]@[10.130.229.196]

比较的结果是

Count: 2  Time=2.79s (5s)  Lock=0.00s (0s)  Rows=1.0 (2), vgos_dba[vgos_dba]@[10.130.229.196]

排在前面,因为比较的时长是(5s)(2s),而不是2.79s2.91s


-s at比较的也是(5s)/count:2(2s)/Count: 1

所以:-s at

Count: 1  Time=2.91s (2s)  Lock=0.00s (0s)  Rows=1000.0 (1000), vgos_dba[vgos_dba]@[10.130.229.196]

排在前面。

 

 Rows=1.0 (2) 是按照以下逻辑展示的

2)是指在Count: 2次数总共返回了2条记录集;row=1.0显示(2/Count: 2

如果此时Count3,那么row的计算方式是Rows=2/3,Rows=0.67

 

主要功能是统计不同慢sql的出现次数(Count),执行最长时间(Time),累计总耗费时间(Time),等待锁的时间(Lock),发送给客户端的行总数(Rows),扫描的行总数(Rows)





-----------------------------有空继续更新-----------------------------



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值