在看Mysql相关内容的时候经常听到两阶段提交,那以前都是云里雾里的,通过学习丁奇老师的这篇文章彻底明白了其流程和含义。

提到两阶段提交,必须先说一下两个日志:redo log和binlog

重要的日志模块:redo log

数据在磁盘中是按照主键顺序存储的,在对数据进行更新操作(insert、update、delete)的时候,既要写数据又可能对其他数据进行移动,如果每次都写进磁盘是很耗性能的。redo log这里就用到的WAS技术,WAL的全称是Write-Ahead Logging,它的关键点是先写日志再写磁盘,并且 写日志是顺序写 速度很快。

具体来说,当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到redo log,并更新内存,这个时候更新就算是完成了。同时Innodb引擎会在适当的时候讲这个操作更新到磁盘里面。

Innodeb的redo log是固定大小的,比如可以配置为一组4个文件,每个文件的大小是1GB,那么总共可以记录4GB的操作,从头开始写,写到末尾就又会到开始循环。当然当大小不够的时候会讲数据刷新到磁盘(数据文件内)。

有了redo log Innodb就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe.

重要的日志模块:binlog

前面提到的redo log是Innodb提供的,而binlog是Server层提供的。这两个日志有如下不同

redo log是Innodb引擎特有的;binlog是Mysql Server层实现的,所有引擎都可以使用

redo log是物理日志,记录的是"在某个数据页上做了什么操作";binlog是逻辑日志,记录的是这个语句的原始逻辑,比如"给ID=2这一行的C字段加1"

redo log是循环写的;binlog是追加的,不会覆盖以前的日志

binlog用于主从同步、恢复数据(误删除)和扩容等

两阶段提交

update test set age = age +1 where id = 1 当执行这条语句的时候,我们看看它的内部流程

执行器先去引擎找id=1的这一行,id是主键引擎直接用树搜索找到这一行。如果这一行的数据页在内存中,就直接返回给执行器,否则就需要从磁盘读取然后在返回。

执行器拿到引擎提供的行数据,给age字段加1,比如原来是9,现在就是10,得到新的一行数据,在调用引擎接口写入这行数据

引擎将新的数据行更新到内存中,同时将这个更新操作记录到redo log,此时redo log处于prepare状态,然后告知执行器执行完成了,随时可以提交事务

执行器生成这个操作的binlog,并把binlog写入磁盘

执行器调用引擎接口,引擎把刚刚写的redo log改成提交commit状态,更新完成。

最后三步比较绕,将redo log的写入拆成了两个步骤prepare和commit,这就是两阶段提交

mysql2阶段提交具体实现_Mysql两阶段提交相关推荐

  1. mysql三阶段提交实现_基于两阶段提交的分布式事务实现(UP-2PC)

    引言:分布式事务是分布式数据库的基础性功能,在2017年上海MySQL嘉年华(IMG)和中国数据库大会(DTCC2018)中作者都对银联UPSQL Proxy的分布式事务做了简要介绍,受限于交流形式难 ...

  2. kafka 两段式提交_如何理解两阶段提交?

    在分布式系统中,为了让每个节点都能够感知到其他节点的事务执行状况,需要引入一个中心节点来统一处理所有节点的执行逻辑,这个中心节点叫做协调者(coordinator),被中心节点调度的其他业务节点叫做参 ...

  3. 两阶段提交实际项目V1

    项目介绍 两阶段提交项目主要是实际用代码演示复现一下,两阶段提交的执行过程,仅供学习参考.本次主要分析的版本为V1版本,主要实现的流程包括服务端的基础架构编写,客户端的基础架构编写,完成事务提交的过程 ...

  4. 两阶段提交与三阶段提交

    两阶段提交是什么? 两阶段提交非常有名,其原因主要有两点: 一个是历史很悠久: 二是其定义是很模糊的,它首先不是一个协议,更不是一个规范,而仅仅是作为一个概念存在,故从传统的关系统数据库一致的最新的 ...

  5. MySQL 为什么需要两阶段提交?

    文章目录 1. 什么是两阶段提交 1.1 binlog 与 redolog binlog redo log 1.2 两阶段提交 2. 为什么需要两阶段提交 3. 小结 为什么要两阶段提交?一阶段提交不 ...

  6. PostgreSQL中的两阶段提交

    在分布式系统中,事务往往包含了多台数据库上的操作.多台数据库之间的原子性,需要通过两阶段提交协议来实现. 两阶段提交协议的步骤: (1)应用程序调用事务协调器中的提交方法. (2)事务协调器将联络事务 ...

  7. CAP原理,分布式一致性算法,两阶段提交,三阶段提交,Paxos,Raft,zookeeper的选主过程,zab协议,顺序一致性,数据写入流程,节点状态,节点的角色

    我们知道,一般在分布式应用都有CAP准则: C Consistency, 一致性,分布式中的各个节点数据保持一致 A availability 可用性,任何时刻,分布式集群总是能够提供服务 P par ...

  8. flink的事务之两阶段提交

    场景描述: 两阶段提交(two-phase commit, 2PC)是最基础的分布式一致性协议,应用广泛.本文来介绍它的相关细节以及它在Flink中的典型应用场景.. 简介: 2PC 在分布式系统中, ...

  9. 【数据库技术】2PL(两阶段锁)下的死锁与饥饿处理手段

    事务处理-2PL下的死锁与饥饿 2PL--2阶段锁存在的问题 一.死锁与等待图 1. 死锁(Deadlock) 2. 等待图(Wait-for graph) 二.死锁的处理手段 1. 死锁预防 2. ...

最新文章

  1. RHCE认证培训+考试七天实录(二)
  2. vim win装_VIM的代码补全工具YouCompleteMe在Windows上的安装攻略
  3. 远程计算机无法操作,Win10系统下qq远程不能控制对方电脑(点不动)的完全解决方法...
  4. LeetCode之Missing Number
  5. [性能测试] LoadRunner结果分析 – TPS
  6. 《jquery实战》javascript 必知必会(1)
  7. 计算机专业务必学好的基本课程
  8. Red Hat Cormier发布OpenShift.io和容器状态指数
  9. GMF:示例Mindmap 练习一
  10. QML 获取当前时间戳 yyyy-MM-dd hh:mm:ss.zzz
  11. 基于uniapp开发的一款Android、iOS上使用的小说阅读app
  12. ce修改植物大战僵尸之植物无冷却
  13. Discuz论坛超漂亮手机模板
  14. 2019招商银行信用卡中心秋招IT笔试编程题总结
  15. ServiceNow在中国还有没有模仿者?
  16. 为什么苹果日历不能设置日程_iphone6提醒事项加入日历怎么不提醒我 到时
  17. netty初使用——实现http及https代理服务器
  18. 职教计算机录取分数,今年高职院校录取分数线是多少?
  19. 个人站长如何接入支付打赏
  20. python函数——自定义函数详解

热门文章

  1. 定位(定位组成【定位模式(静态定位,相对定位,绝对定位,固定定位,粘性定位,定位总结),位偏移】,)
  2. UE5 Lumen 自定义发光颜色
  3. SSH登陆linux服务器
  4. 树莓派用网线直连笔记本电脑
  5. java version命令_java -version命令报错如何解决
  6. 畅享8K高清,三星电视将搭载HDMI2.1接口
  7. 怎么查看三星电视服务器是否维护,三星液晶电视怎么保养 三星液晶电视维修保养方法【详解】...
  8. java+vue+nodejs环境保护宣传网站设计与实现
  9. Redis --图灵
  10. pgsql获取日期段_PostgreSQL时间段查询