返回顶部
首页 > 资讯 > 数据库 >什么是两阶段提交和组提交
  • 829
分享到

什么是两阶段提交和组提交

2024-04-02 19:04:59 829人浏览 泡泡鱼
摘要

本篇文章为大家展示了什么是两阶段提交和组提交,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。出于性能的考虑,事务在提交时为了保证数据安全,需要将redo和undo数据

本篇文章为大家展示了什么是两阶段提交和组提交,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

出于性能的考虑,事务在提交时为了保证数据安全,需要将redo和undo数据落盘,不用等待数据落盘。但是Mysql不仅要考虑innodn存储引擎层的redo数据,还要考虑数据库上层的binlog数据落盘,已经两个层面数据落盘的顺序问题。两阶段提交可以解决单个事务redo和binlog落盘顺序的问题。

两阶段提交(2PC)分为两个过程:

l  准备阶段(prepare phase)

生成xid信息,回滚段设置为prepare状态,并将redo落盘。

l  提交阶段(commit phase)

在binlog生成commit 的XID event,Binlog落盘,释放回滚段,释放

两阶段提交的回滚:
       只写了redo,没落盘binlog,回滚。

落盘了redo,binlog落盘成功了,也有commit XID,自然是成功。

落盘了redo,binlog落盘成功了,没有commit XID,也认为事务已提交。

现在再来思考下一个问题,如果每个事物提交的时候,都要去将redo和binlog落盘,那么瓶颈就在落盘阶段被放大了。这个时候就要引入组提交。组提交使得redo和binlog落盘的时候可以批量落盘,多个事务的redo和binlog可以一次fsync操作完成数据落盘,减少了fsync函数的调用,提高了效率。同时innodb存储引擎层本身就支持组提交。

组提交之后,引入了另一个问题。数据库上层的binlog写入顺序和innodb层事务提交顺序无法保持一致。如果不保持一致,那么就会出现通过在线工具比如xtrabackup备份数据库搭建主从的时候,出现丢失事务的场景,比如下面:

     什么是两阶段提交和组提交                                        

      binlog提交顺序(T1,T2,T3),innodb commit顺序(T2,T3,T1),此时innodb检测到T3上下两层都已经提交,认为不再需要恢复,那么T1事务在备份的时候没有经历两阶段提交,T1的事务在备份的时候数据还是事务开始前的数据,从库又不再进行恢复,导致T1事务被丢弃。所以后来引进了prepare_commit_mutex,以串行的方式来保证顺序,但是这样会使组提交失效,所以后来提出了BLGC(binary log group commit)

该行为分为三个阶段

Flush阶段

内存中生成事务的二进制日志

Sync阶段

将内存中多个事务的二进制日志调用1次fsync刷盘

Commit阶段

二进制日志在内存中会有一个队列,队列第一个事务是leader,其他时follower,leader会根据顺序调用存储引擎层事务提交。Innodb本身就支持组提交。

上述内容就是什么是两阶段提交和组提交,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 什么是两阶段提交和组提交

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

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

猜你喜欢
  • 什么是两阶段提交和组提交
    本篇文章为大家展示了什么是两阶段提交和组提交,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。出于性能的考虑,事务在提交时为了保证数据安全,需要将redo和undo数据...
    99+
    2024-04-02
  • MySQL的两阶段提交机制是什么
    本文小编为大家详细介绍“MySQL的两阶段提交机制是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL的两阶段提交机制是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2023-02-11
    mysql
  • 分布式事务CAP两阶段提交及三阶段提交详解
    目录1关于分布式系统1.1介绍1.2优势和不足2分布式事务2.1CAP理论2.2CAP的组合情况2.3数据一致性模型2.4分布式事务应用场景2.4.1典型支付场景2.4.2 ...
    99+
    2024-04-02
  • MySQL两阶段提交过程原理简述
    MySQL使用两阶段提交主要解决 binlog 和 InnoDB redo log 的数据一致性的问题. 两阶段提交简图: 两阶段提交原理描述: 阶...
    99+
    2024-04-02
  • MySQL事务提交的三个阶段是什么
    本篇内容介绍了“MySQL事务提交的三个阶段是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!事务提交分...
    99+
    2024-04-02
  • 【MYSQL】两阶段提交及相关参数介绍
        由于Mysql的事务日志包含二进制日志和存储引擎日志,当发生崩溃恢复时,MySQL主节点通过redo log进行恢复,而在主从复制的环境下,slaver节点是...
    99+
    2024-04-02
  • Mycat分布式事务两阶段提交过程是怎样的
    本篇文章为大家展示了Mycat分布式事务两阶段提交过程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 两阶段提交过程可以用以下图...
    99+
    2024-04-02
  • 分布式数据库事务的两阶段提交介绍
    在分布式系统中,各个节点之间在物理上相互独立,通过网络进行沟通和协调。由于存在事务机制,可以保证每个独立节点上的数据操作可以满足ACID。但是,相互独立的节点之间无法准确的知道其他节点中的事务执行情况。所以...
    99+
    2024-04-02
  • ajax的两种提交方式是什么
    这篇文章主要介绍“ajax的两种提交方式是什么”,在日常操作中,相信很多人在ajax的两种提交方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ajax的两种提交方式是...
    99+
    2024-04-02
  • AJAX提交与FORM提交的区别是什么
    这篇文章主要讲解了“AJAX提交与FORM提交的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“AJAX提交与FORM提交的区别是什么”吧!现在来对...
    99+
    2024-04-02
  • MySQL中的数据编辑过程中涉及的两阶段提交分别是什么
    这期内容当中小编将会给大家带来有关MySQL中的数据编辑过程中涉及的两阶段提交分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MySQL 数据库中的两阶段提交,不...
    99+
    2024-04-02
  • 怎么理解MySQL事务两段式提交
    本篇内容主要讲解“怎么理解MySQL事务两段式提交”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解MySQL事务两段式提交”吧!⒈两段式提交的目的:解决参...
    99+
    2024-04-02
  • MongoDB数据库两阶段提交实现事务的方法详解
    本文实例讲述了MongoDB数据库两阶段提交实现事务的方法。分享给大家供大家参考,具体如下: MongoDB数据库中操作单个文档总是原子性的,然而,涉及多个文档的操作,通常被作为一个“事务”,而不是原子性的...
    99+
    2024-04-02
  • Git提交规范是什么
    本篇内容介绍了“Git提交规范是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、为什么需要规范无规矩...
    99+
    2024-04-02
  • MySQL binlog和redo的组提交
    整体概述:组提交(group commit)是MYSQL处理日志的一种优化方式,主要为了解决写日志时频繁刷磁盘的问题。组提交伴随着MYSQL的发展不断优化,从最初只支持redo log 组提交,到目前5...
    99+
    2024-04-02
  • Git的提交步骤是什么
    这篇文章主要介绍“Git的提交步骤是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Git的提交步骤是什么”文章能帮助大家解决问题。Git 提交的基本概念提交是 Git 中最基本的概念。提交,又叫...
    99+
    2023-07-05
  • ajax默认提交方式是什么
    这篇文章主要介绍“ajax默认提交方式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ajax默认提交方式是什么”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • 字节跳动流式数据集成基于Flink Checkpoint两阶段提交的实践和优化
    背景 字节跳动开发套件数据集成团队(DTS ,Data Transmission Service)在字节跳动内基于 Flink 实现了流批一体的数据集成服务。其中一个典型场景是 Kafka/ByteMQ/RocketMQ -> HDFS/...
    99+
    2015-04-15
    字节跳动流式数据集成基于Flink Checkpoint两阶段提交的实践和优化
  • php回车不提交表单和提交表单怎么实现
    这篇“php回车不提交表单和提交表单怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php回车不提交表单和提交表单怎么...
    99+
    2023-07-05
  • Mysql两阶段锁和死锁是什么
    本篇内容主要讲解“Mysql两阶段锁和死锁是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql两阶段锁和死锁是什么”吧!两阶段锁概念讲的是InnoDB...
    99+
    2022-12-27
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作