前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql两阶段提交

mysql两阶段提交

原创
作者头像
陈平安
修改2022-07-30 16:52:47
9840
修改2022-07-30 16:52:47
举报
文章被收录于专栏:trick时间

1.什么是两阶段提交?

两阶段提交是一种为了始终保持两个独立逻辑体一致的执行方式。

如果要完成提交操作在执行层面被分成了两个部分(prepare->commit),prepare阶段可以理解为询问所有参与者是否已经准备好,commit阶段确认完所有参与者准备完成那么具体执行相关操作。

2.为什么要引入两阶段提交?

通过两阶段提交保证了当一个事物会涉及多方参与时状态的一致性。

3.mysql的redo的2PC实现逻辑

mysql客户端显示输入"commit"时候或者隐式提交都会触发的2PC过程。

  1. 事务执行中/提交前 把操作的日志保存到redo log buffer中,也保存到binlog cache 中 2.提交后 1. redo的prepare阶段:把内存中的log buffer日志写入redo文件并标记为prepare(先write然后fsync把redolog持久化了) 2. 内存中的binlog cache写到binlog文件中 3. redo的commit阶段(只write就够了):redolog标记为commited

举个例子:

代码语言:txt
复制
  update kid_info set age=18 where id=1

执行流程如下:

image.png
image.png

innodb在写redolog日志的时候,会先写log buffer,执行阶段就会写,提交阶段就写磁盘(先prepare,后commit阶段)。binlog 是在提交阶段写。

参考:

https://blog.csdn.net/u010647035/article/details/104733939

https://blog.csdn.net/qq_33591903/article/details/122030252

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.什么是两阶段提交?
  • 2.为什么要引入两阶段提交?
  • 3.mysql的redo的2PC实现逻辑
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档