文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL慢查询中的commit慢和binlog中慢事务有什么区别

2023-07-02 09:59

关注

这篇文章主要介绍了MySQL慢查询中的commit慢和binlog中慢事务有什么区别的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL慢查询中的commit慢和binlog中慢事务有什么区别文章都会有所收获,下面我们一起来看看吧。

一、问题来源

在分析性能问题的时候慢查询和binlog慢事务是常用的手段。最近在分析一个慢查询的,发现其中包含了大量的commit语句慢,但是在分析binlog慢事务的时候不能完成匹配。比如这段时间commit的语句可能有1000个,但是慢事务可能只有100个,这个差得也太多了,那么为什么会出现这种现象呢?

二、各自的判定方式

因此我们通常通过XID_EVENT的时间减去QUERY_EVENT的时间就得到了一个慢事务时间, 当然如果是自动提交的则不能这么计算 ,因为各个event都是语句发起的时间。

我们知道commit慢最可能的地方在binlog的刷盘或者等待半同步从库ACK,但是binlog中XID EVENT的时间却不包含这部分时间,也就是说binlog慢事务和慢查询中的commit记录的不是一个时间段。

如果我们以如下事务为例,进行简要说明

begin;insert into it values(10);commit;        -- insert语句执行      -> QUERY_EVENT时间(T1)  -- insert语句执行完成,判定insert语句是否为慢查询(T2)          -- commit语句执行      -> GTID_LOG_EVENT和XID_EVENT时间(T3)   flush   fsync                  -----> 传输binlog (sync_binlog=1)                  <----   等待ACK   (rpl_semi_sync_master_wait_point=AFTER_SYNC)   commit-- commit语句执行完成,判定commit语句是否为慢查询(T4)

因此慢事务的判定和慢查询中commit慢的判定几乎没有什么交集,因此出现这种情况也是正常的,下面来证明。

三、证明

这样人为在断点处等待一下就显著的拉长了commit的时间,同时也证明半同步慢会影响commit慢,如下:

begin;select now();   -T1insert into it values(10);select sleep(10);select now();   -T2commit; (断点在从库生效卡主ack) -T3select now();   -T4结果mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select now();      -T1+---------------------+| now()               |+---------------------+| 2022-06-12 22:20:43 |+---------------------+1 row in set (0.00 sec)mysql> insert into it values(10);Query OK, 1 row affected (0.10 sec)mysql> select sleep(10);+-----------+| sleep(10) |+-----------+|         0 |+-----------+1 row in set (10.01 sec)mysql> select now();      -T2 AND T3+---------------------+| now()               |+---------------------+| 2022-06-12 22:20:54 |+---------------------+1 row in set (0.00 sec)mysql> commit;         Query OK, 0 rows affected (21.64 sec)mysql> select now();    -T4+---------------------+| now()               |+---------------------+| 2022-06-12 22:21:15 |+---------------------+1 row in set (0.00 sec)

我们来分析一下慢查询和binlog,这里加入了sleep(10)拖长了事务commit时间,因为insert太快了。

# at 12221#220612 22:20:54 server id 613306  end_log_pos 12286 CRC32 0x3e019332   GTID    last_committed=40       sequence_number=41      rbr_only=yes;SET @@SESSION.GTID_NEXT= '00320cc8-39f9-11ec-b5ba-000c2929706d:41';# at 12286#220612 22:20:43 server id 613306  end_log_pos 12360 CRC32 0x8dcde193   Query   thread_id=43    exec_time=1     error_code=0SET TIMESTAMP=1655043643;BEGIN;# at 12360#220612 22:20:43 server id 613306  end_log_pos 12409 CRC32 0x0db68582   Rows_query# insert into it values(10)# at 12409#220612 22:20:43 server id 613306  end_log_pos 12456 CRC32 0x363a48c7   Table_map: `mysemi`.`it` mapped to number 124# at 12456#220612 22:20:43 server id 613306  end_log_pos 12496 CRC32 0xd44e43f3   Write_rows: table id 124 flags: STMT_END_F### INSERT INTO `mysemi`.`it`### SET###   @1=10 # at 12496#220612 22:20:54 server id 613306  end_log_pos 12527 CRC32 0x4d8d2c64   Xid = 547COMMIT;
# Time: 2022-06-12T22:21:15.746223Z# User@Host: root[root] @ localhost []  Id:    43# Schema: mysemi  Last_errno: 0  Killed: 0# Query_time: 21.641090  Lock_time: 0.000000  Rows_sent: 0  Rows_examined: 0  Rows_affected: 0# Bytes_sent: 11SET timestamp=1655043675;commit;

这里很显然了慢查询记录的commit慢明显不包含在慢事务中。

关于“MySQL慢查询中的commit慢和binlog中慢事务有什么区别”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“MySQL慢查询中的commit慢和binlog中慢事务有什么区别”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯