MYSQL慢日志探索

1. 出现场景

 今天审计SQL慢查询,发现一个很简单的SQL语句出现在了满日志里面,并且相应时间还很长,拿出去直接去查看执行计划,并没有发现什么问题。突然感觉为什么会记录在慢日志中感觉很模糊。亲自动手找一下原因吧
问题语句:select userid from tbl_name where mobile =?

2. 什么样的慢查询会记录到slow log日志

2.1 慢日志查询和锁定时间介绍

在Slog慢日志中,会有类似这样的数据,体现了2个参数,查询时间和所等待时间
# Query_time: 27.620161 Lock_time: 25.615839 Rows_sent: 1 Rows_examined: 1

2.2 何时记录慢日志

记录到慢日志的SQL与Query_time,Lock_time,long_query_time有什么关系呢?为了解决这个问题,我特意做了一个下面的实验,废话不在多说,准备测试数据

2.2.1 设置开启MySQL慢日志相关参数

我的设置如下:
slow_query_log=1
long_query_time=1
slow_query_log_file=/home/db/Main.Slow.log

2.2.2 准备测试数据

[localhost](dog) 11:17:45>CREATE TABLE Gbk_Null (
id int(11) NOT NULL AUTO_INCREMENT,
name char(10) DEFAULT NULL,
PRIMARY KEY (id),
KEY name(name)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=gbk;
[localhost](dog) 12:17:02>select * from Gbk_Null;
+—-+——-+
| id | name |
+—-+——-+
| 1 | aaa |
| 2 | bbbb |
| 3 | cccc |
| 4 | ddd |
| 5 | eeee |
| 6 | fffff |
+—-+——-+
6 rows in set (0.00 sec)

2.2.3  测试场景介绍

场景1:
session A:
begin;
select * from Gbk_Null where id =1 for update;

Session B;
begin:
select *,sleep(2) from Gbk_Null where id =1 for update;

然后去场景中commit事务,观察是否有满日志记录到满日志文件中

场景2:
session A:
begin;
select * from Gbk_Null where id =1 for update;

Session B;
begin:
select * from Gbk_Null where id =1 for update;

然后去场景中commit事务,观察是否有满日志记录到满日志文件中

场景3:
session A:
begin;
select * from Gbk_Null where id =1 for update;

Session B;
begin:
select *,sleep(0.5) from Gbk_Null where id =1 for update;

2.2.3  测试结果展示

通过上面场景的测试,发现了场景1的Session B中SQL被记录到了满日志中,而场景2,场景3 没有任何的满日志记录信息,慢日志内容如下

# Time: 150227 11:12:52
# User@Host: root[root] @ localhost [127.0.0.1] Id: 9
# Query_time: 9.623483 Lock_time: 7.623200 Rows_sent: 1 Rows_examined: 1
use dog;
SET timestamp=1425006772;
select *,sleep(2) from Gbk_Null where id =1 for update;

 

3. 结论

1)Query_time – Lock_time > long_query_time <==> 记录

1)Query_time – Lock_time < long_query_time <==> 不记录


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值