iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL慢查询中的commit慢和binlog中慢事务有什么区别
  • 398
分享到

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

2023-07-02 09:07:10 398人浏览 薄情痞子
摘要

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

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

一、问题来源

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

二、各自的判定方式

  • 慢事务 对于一个显示提交的(insert)事务通常如下:

  • GTID_LOG_EVENT和XID_EVENT是命令‘COMMIT’发起的时间。

  • QUERY_EVENT是第一个‘Insert’命令发起的时间。

  • MAP_EVENT/WRITE_ROWS_EVENT是每个‘Insert’命令发起的时间。

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

  • commit 慢的可能性

我们知道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)
  • 判定insert语句是否慢的标准是T2-T1(-时间)

  • 判定commit语句是否慢的标准是T4-T3

  • 判定慢事务的标准是T3-T1

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

三、证明

  • 主库:半同步超时时间为999999999。

  • 从库:设置sync_relay_log=1,并且断点设置在mysql_BIN_LOG::flush_and_sync函数上,本函数是从库每次event写到relay log后受到 sync_relay_log=1 的影响必须要落盘的判定函数。

这样人为在断点处等待一下就显著的拉长了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太快了。

  • binlog慢事务 22:20:54(T2) - 22:20:43(T1) = 11秒左右(我们加入了sleep(10))

# 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;
  • 慢查询中的commit慢 22:21:15(T4) - 22:20:54(T3) = 21秒

# 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中慢事务有什么区别”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL慢查询中的commit慢和binlog中慢事务有什么区别

本文链接: https://www.lsjlt.com/news/340956.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL慢查询中的commit慢和binlog中慢事务有什么区别
    这篇文章主要介绍了MySQL慢查询中的commit慢和binlog中慢事务有什么区别的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL慢查询中的commit慢和binlog中慢事务有什么区别文章都会有所收...
    99+
    2023-07-02
  • MySQL中慢查询指的是什么
    这篇文章主要介绍MySQL中慢查询指的是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!分析MySQL语句查询性能的方法除了使用EXPLAIN输出执行计划,还可以让MySQL记录下...
    99+
    2024-04-02
  • MySQL的慢查询是什么
    这篇文章主要讲解了“MySQL的慢查询是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL的慢查询是什么”吧!MySQL慢查询分析 在我...
    99+
    2024-04-02
  • MySQL中怎么实现慢查询
    MySQL中怎么实现慢查询,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1  什么是慢SQL?这里指的是MySQL慢...
    99+
    2024-04-02
  • MySQL中怎么定位慢查询
    本篇文章给大家分享的是有关MySQL中怎么定位慢查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。NO.1 慢查询日志定位解析MySQL 的慢...
    99+
    2024-04-02
  • MySQL中有哪些慢查询语句
    本篇文章给大家分享的是有关MySQL中有哪些慢查询语句,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。通过SHOW FULL PROCESSLI...
    99+
    2024-04-02
  • mysql中怎么配置慢查询
    mysql中怎么配置慢查询,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。慢查询配置 MYSQL慢查询1. 慢查询有什...
    99+
    2024-04-02
  • mysql慢查询指的是什么
    这篇文章将为大家详细讲解有关mysql慢查询指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MySQL慢查询就是在日志中记录运行比较慢的SQL语句,这个功能需要开...
    99+
    2024-04-02
  • mysql中慢查询日志指的是什么
    这篇文章给大家分享的是有关mysql中慢查询日志指的是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、介绍用于记录执行时间超过某个临界值的SQL日志,用于快速定位慢速查询,供我们优化参考。2、开启方法打开慢...
    99+
    2023-06-15
  • mysql慢查询的奇异事件有哪些
    这篇文章将为大家详细讲解有关mysql慢查询的奇异事件有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 打开mysql慢查询日志,发现有很多sql查询时间很短,明显...
    99+
    2024-04-02
  • MySQL中慢查询记录的原理是什么
    本篇文章给大家分享的是有关MySQL中慢查询记录的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 一、慢查询中的时间 实际...
    99+
    2024-04-02
  • MySQL中的慢查询是什么及有哪些危害
    本文小编为大家详细介绍“MySQL中的慢查询是什么及有哪些危害”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL中的慢查询是什么及有哪些危害”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、什么是慢查询什...
    99+
    2023-07-04
  • MySQL中查询缓慢的原因有哪些
    这期内容当中小编将会给大家带来有关MySQL中查询缓慢的原因有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。两个原则两条快于一条:***条SQL语句中,wher...
    99+
    2024-04-02
  • MySQL中Sending data查询慢怎么办
    这篇文章将为大家详细讲解有关MySQL中Sending data查询慢怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、事故现场 SELECT o...
    99+
    2024-04-02
  • 怎么在MySQL中开启Slow慢查询
    这篇文章给大家介绍怎么在MySQL中开启Slow慢查询,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。方法如下:1:登录数据库查看是否已经开启了Slow慢查询:mysql>&nbs...
    99+
    2024-04-02
  • mysql中怎么慢查询日志记录
    mysql中怎么慢查询日志记录,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1,配置开启 :在mysql配置文件my.cnf中增加log-...
    99+
    2024-04-02
  • MySQL中的慢查询日志怎么开启
    这篇“MySQL中的慢查询日志怎么开启”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL中的慢查询日志怎么开启”文章吧...
    99+
    2023-07-05
  • Redis中慢查询和订阅模式是什么
    这篇文章主要讲解了“Redis中慢查询和订阅模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis中慢查询和订阅模式是什么”吧!慢查询慢查询日志...
    99+
    2024-04-02
  • mysql中慢查询报警怎么处理
    这篇文章将为大家详细讲解有关mysql中慢查询报警怎么处理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在做节后的一个基本检查的时候,发现一个不太起眼的报警,报警内容为大...
    99+
    2024-04-02
  • mysql慢日志查询的方法是什么
    要查询MySQL慢日志,可以使用以下方法: 登录到MySQL数据库管理系统。 运行以下SQL查询语句来查看慢查询日志的参数设...
    99+
    2024-03-14
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作