马上双十一大促了,要统一过一遍所有数据库负载较高的机器,把慢查询处理一下;
我们慢日志都是通过pt-query-digest 分析的;
当查到某套业务DB的时候发现一个奇怪的情况,如下图显示,慢日志里面93%占比是COMMIT语句导致;
DB默认是自动提交的,不存在"COMMIT"; 既然是commit,肯定是会话被关闭了自动提交;
但是为什么没有记录对应的语句,而只记录了COMMIT;呢 ?
原因可能是业务启用了大事务, 例如BEGIN开启事务后,里面执行了大量的INSERT语句,然后再做COMMIT提交;
验证;
1, 在测试DB中关闭自动提交功能;
2, BEGIN, 然后插入10W条数据; 再提交
产生10W条INSERT语句,写个循环生成一下即可;
3, 循环第二步骤10次; (增加次数,便于观察)
shell写个for循环执行即可
for x in {1..10};do echo $x; mysql -e "begin;source /root/insert.log;commit";done
4, 分析日志查看结果;
结果和猜想的一致;
那么这种情况,如何取抓慢日志呢???
暂时考虑2个方向; 1, 活动会话抽样提取; 2, 分析BINLOG了;