返回顶部
首页 > 资讯 > 数据库 >MySQL组提交group commit实例分析
  • 466
分享到

MySQL组提交group commit实例分析

2023-07-02 14:07:52 466人浏览 安东尼
摘要

今天小编给大家分享一下MySQL组提交group commit实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧

今天小编给大家分享一下MySQL组提交group commit实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    引 言

    MySQL组提交group commit实例分析

    前提:

    • 以下讨论的前提 是设置Mysql的crash safe相关参数为双1:

    sync_binlog=1

    innodb_flush_log_at_trx_commit=1

    背景说明:

    • WAL机制 (Write Ahead Log)定义: WAL指的是对数据文件进行修改前,必须将修改先记录日志mysql为了保证ACID中的一致性和持久性,使用了WAL。

    • Redo log的作用: Redo log就是一种WAL的应用。当数据库忽然掉电,再重新启动时,Mysql可以通过Redo log还原数据。也就是说,每次事务提交时,不用同步刷新磁盘数据文件,只需要同步刷新Redo log就足够了。相比写数据文件时的随机io,写Redo log时的顺序IO能够提高事务提交速度。

    • 组提交的作用:

    • 在没有开启binlog时

    Redo log的刷盘操作将会是最终影响MySQL TPS的瓶颈所在。为了缓解这一问题,MySQL使用了组提交,将多个刷盘操作合并成一个,如果说10个事务依次排队刷盘的时间成本是10,那么将这10个事务一次性一起刷盘的时间成本则近似于1。

    • 当开启binlog时

    为了保证Redo log和binlog的数据一致性,MySQL使用了二阶段提交,由binlog作为事务的协调者。而 引入二阶段提交 使得binlog又成为了性能瓶颈,先前的Redo log 组提交 也成了摆设。为了再次缓解这一问题,MySQL增加了binlog的组提交,目的同样是将binlog的多个刷盘操作合并成一个,结合Redo log本身已经实现的 组提交,分为三个阶段(Flush 阶段、Sync 阶段、Commit 阶段)完成binlog 组提交,最大化每次刷盘的收益,弱化磁盘瓶颈,提高性能。

    图解:

    下图我们假借“渡口运输”的例子来看看binlog 组提交三个阶段的流程:

    MySQL组提交group commit实例分析

    在MySQL中每个阶段都有一个队列,每个队列都有一把保护,第一个进入队列的事务会成为leader,leader领导所在队列的所有事务,全权负责整队的操作,完成后通知队内其他事务操作结束。

    Flush 阶段 (图中第一个渡口)

    • 首先获取队列中的事务组

    • 将Redo log中prepare阶段的数据刷盘(图中Flush Redo log)

    • 将binlog数据写入文件,当然此时只是写入文件系统的缓冲,并不能保证数据库崩溃时binlog不丢失 (图中Write binlog)

    • Flush阶段队列的作用是提供了Redo log的组提交

    • 如果在这一步完成后数据库崩溃,由于协调者binlog中不保证有该组事务的记录,所以MySQL可能会在重启后回滚该组事务

    Sync 阶段 (图中第二个渡口)

    • 这里为了增加一组事务中的事务数量,提高刷盘收益,MySQL使用两个参数控制获取队列事务组的时机:

    binlog_group_commit_sync_delay=N:在等待N μs后,开始事务刷盘(图中Sync binlog)

    binlog_group_commit_sync_no_delay_count=N:如果队列中的事务数达到N个,就忽视binlog_group_commit_sync_delay的设置,直接开始刷盘(图中Sync binlog)

    • Sync阶段队列的作用是支持binlog的组提交

    • 如果在这一步完成后数据库崩溃,由于协调者binlog中已经有了事务记录,MySQL会在重启后通过Flush 阶段中Redo log刷盘的数据继续进行事务的提交

    Commit 阶段 (图中第三个渡口)

    • 首先获取队列中的事务组

    • 依次将Redo log中已经prepare的事务在引擎层提交(图中InnoDB Commit)

    • Commit阶段不用刷盘,如上所述,Flush阶段中的Redo log刷盘已经足够保证数据库崩溃时的数据安全

    • Commit阶段队列的作用是承接Sync阶段的事务,完成最后的引擎提交,使得Sync可以尽早的处理下一组事务,最大化组提交的效率

    以上就是“MySQL组提交group commit实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网数据库频道。

    您可能感兴趣的文档:

    --结束END--

    本文标题: MySQL组提交group commit实例分析

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

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

    猜你喜欢
    • MySQL组提交group commit实例分析
      今天小编给大家分享一下MySQL组提交group commit实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
      99+
      2023-07-02
    • MySQL组提交group commit详解
      目录引 言前提:背景说明:图解:Flush 阶段 (图中第一个渡口)Sync 阶段 (图中第二个渡口)Commit 阶段 (图中第三个渡口)缺陷分析:引 言 前提: 以下讨论的前提 是设置mysql的crash saf...
      99+
      2022-07-01
      MySQL组提交 MySQLgroupcommit
    • jquery表单提交的方法实例分析
      这篇文章主要介绍“jquery表单提交的方法实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“jquery表单提交的方法实例分析”文章能帮助大家解决问题。 ...
      99+
      2024-04-02
    • HTML <transition-group>实例分析
      这篇文章主要讲解了“HTML <transition-group>实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML <tra...
      99+
      2024-04-02
    • 当ASP.NET MVC邂逅jQuery.Ajax提交数组的示例分析
      本篇文章给大家分享的是有关当ASP.NET MVC邂逅jQuery.Ajax提交数组的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。当ASP.NET MVC 通过JQu...
      99+
      2023-06-17
    • MySQL中GROUP BY分组排序获取topN相关的示例分析
      这篇文章主要介绍MySQL中GROUP BY分组排序获取topN相关的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! MySQL VERSION...
      99+
      2024-04-02
    • pandas group分组与agg聚合的实例
      如下: import pandas as pd df = pd.DataFrame({'Country':['China','China', 'India', 'India'...
      99+
      2024-04-02
    • springboot表单提交之validator校验的实例分析
      小编给大家分享一下springboot表单提交之validator校验的实例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言表单提交是最常见的数据提交方式,...
      99+
      2023-06-15
    • MySQL找出未提交事务的SQL实例浅析
      很久之前曾经总结过一篇博客“MySQL如何找出未提交事务信息”,现在看来,这篇文章中不少知识点或观点都略显肤浅,或者说不够深入,甚至部分结论是错误的。下面重新探讨一下这个话题。那么我们还是以之前的例子来介绍。 --准...
      99+
      2022-05-19
      mysql数据库事务 mysql提交事务 mysql 事务sql
    • Ajax提交form表单的示例分析
      这篇文章给大家分享的是有关Ajax提交form表单的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ajax (ajax开发) AJAX即“Asynchronous Jav...
      99+
      2024-04-02
    • Mysql事务隔离级别之读提交的示例分析
      这篇文章主要为大家展示了“Mysql事务隔离级别之读提交的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mysql事务隔离级别之读提交的示例分析”这篇文...
      99+
      2024-04-02
    • Angular2中组件交互的示例分析
      这篇文章主要为大家展示了“Angular2中组件交互的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Angular2中组件交互的示例分析”这篇文章吧。1...
      99+
      2024-04-02
    • Angular中组件交互的示例分析
      这篇文章将为大家详细讲解有关Angular中组件交互的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Angular 组件交互组件交互: 组件通讯,让两个或多个组件之间共享信息。使用场景: 当某个功...
      99+
      2023-06-14
    • angularjs中$http提交数据的示例分析
      小编给大家分享一下angularjs中$http提交数据的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前两天在搞自己的...
      99+
      2024-04-02
    • json格式中Ajax提交的示例分析
      这篇文章给大家分享的是有关json格式中Ajax提交的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。需要加入:com.springsource.org.apache.co...
      99+
      2024-04-02
    • vue组件表单数据回显验证及提交的示例分析
      这篇文章主要介绍vue组件表单数据回显验证及提交的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近项目需要到vue开发单页面,所以就研究一下表单数据的回显,验证及提交如何用...
      99+
      2024-04-02
    • JS中表单提交验证的示例分析
      这篇文章将为大家详细讲解有关JS中表单提交验证的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在进行表单提交时,需要对输入框和文本域等的value的合理性进行验证...
      99+
      2024-04-02
    • Python元组实例分析
      本篇内容主要讲解“Python元组实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python元组实例分析”吧!引言——在Python中,通过数据结构来保存项目中重要的数据信息。Pytho...
      99+
      2023-06-29
    • MySQL 5.7半同步复制after sync和after commit的示例分析
      这篇文章主要介绍了MySQL 5.7半同步复制after sync和after commit的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了...
      99+
      2024-04-02
    • vue表单提交防双/多击的示例分析
      这篇文章主要介绍vue表单提交防双/多击的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!先说下出现场景:测试这次比较极端(也有可能是测试又学会什么新知识了,哈哈),说是在点击...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作