马上双十一大促了,要统一过一遍所有数据库负载较高的机器,把慢查询处理一下;

我们慢日志都是通过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了; 

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐