千家信息网

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

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章为大家展示了什么是两阶段提交和组提交,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。出于性能的考虑,事务在提交时为了保证数据安全,需要将redo和und
千家信息网最后更新 2026年11月03日什么是两阶段提交和组提交

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

出于性能的考虑,事务在提交时为了保证数据安全,需要将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本身就支持组提交。

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

事务 阶段 数据 顺序 时候 问题 成功 二进制 内存 备份 引擎 数据库 日志 存储 一致 上层 两个 内容 多个 技能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 中国互联网科技股 今日互联网科技 北京互联网科技 互联网科技公司名称 互联网 科技服务平台 滨湖区互联网智能科技产品供应 博兴的互联网电子科技公司 中国的互联网科技企业的崛起 玉溪互联网科技怎么选 互联网科技大奖都有哪些公司 健康食品互联网创新科技园项目 洛阳共同富裕互联网科技有限公司 深圳市罗太互联网科技有限公司 晋城互联网科技 烟台灵鸽互联网科技有限公司 无锡工业互联网科技有限公司 浙南科技城互联网大厦招聘 新氧科技和美国互联网有关系吗 唐山双旺合互联网科技产业园 美国互联网科技 广州紫鲸互联网科技 湖南洣水互联网科技有限公司扣款 北京大学互联网科技怎么样 华夏互联网科技业 洛阳昕诺飞互联网科技有限公司 保险科技服务互联网营销体系 众安科技工业互联网合作 美国互联网科技实力 陕西云淼互联网科技公司
0