MySQL InnoDB 事务实现过程相关内容的概述
MySQL事务的实现涉及到redo和undo以及purge,redo是保证事务的原子性和持久性;undo是保证事务的一致性(一致性读和多版本并发控制);purge清理undo表空间
背景知识,对于Innodb表中的行每一行包括:
6字节的事务ID(DB_TRX_ID)字段: 用来标识最近一次对本行记录做修改(INSERT|UPDATE)的事务的标识符, 即最后一次修改(INSERT|UPDATE)本行记录的事务id。
7字节的回滚指针(DB_ROLL_PTR)字段: 指写入回滚段(ROLLBACK segment)的 UNDO LOG record (撤销日志记录记录)。
如果一行记录被更新, 则 UNDO LOG record 包含 '重建该行记录被更新之前内容' 所必须的信息。
1,MySQL事务执行过程中,
对于undo log
对于update或者delete操作,每一行都保存了一个事务Id,修改事务Id为当前Session的事务id,
生成数据行事务之前的版本,将当前行的回滚指针指向事务之前的版本。
对于insert操作,将当前行的回滚指针指为空,因为insert没有事务操作之前的版本。
对于redo log
随着update\delete\insert操作的执行,重做日志Redo Log不断地写入重做日志缓存(redo_log_buffer),
对于Redo Log Buffer的落盘(写入 Redo Log File),有三种策略:
(1),事务commit的时候,
(2),redo_log_buffer(默认8MB)使用超过50%的时候,
(3),发生checkpoint的时候
也就是说,Redo Log Buffe的落盘并不一定是事务提交的时候才写入的,对于大事务,redo log是有可能逐步落盘的(2,3两点的影响)
2,事务的提交Commit
Redo Log Buffer的写盘,由变量innodb_flush_log_at_trx_commit决定,有三种模式分别是0,1,2
如果设置为0,事物提交不触发Redo Log Buffer写盘,每N秒将Redo Log Buffer的记录写入Redo Log文件,并且将Redo Log文件刷入硬件存储1次,N由innodb_flush_log_at_timeout控制。
如果设置为1,事务提交时同步刷新Redo Log Buffe到Redo Log文件,并且将Redo Log文件刷新到磁盘。
如果设置为2,事务提交时同步刷新Redo Log Buffe到Redo Log文件,.但是Redo Log 的flush(刷到磁盘)操作并不会同时进行。Redo Log的写盘由操作系统和innodb_flush_log_at_timeout控制。
需要注意的是,innodb_flush_log_at_trx_commit=1的情况下,尽管事务提交可以保证redo log同步写盘,
但是Redo Log Buffer的写盘并不一定只有在事务提交的时候才写入的,有可能是随着时候的执行(如果事务很大)逐步写盘的。
3,事务提之后
因为redo log的存在(写盘之后),事务的一致性和持久性得到了保证,对于内存中的脏数据,通过checkpoint或者内存机制刷入磁盘,在数据写入磁盘之后,redo log空间即可释放
对于undo log,当没有活动Session访问的时候,由purge线程异步清理undo log占用的空间
见不少人写博客使用xmind或者其他工具对相关知识点进行整理,
发现类似于xmind的结构图对于知识结构非常清晰,xmind第一份工作用过,好久没用了,装了试用版发现功能受限很多。
于是尝试类似于xmind的在线工具,发现百度脑图还可以,关键是在线的,随时随地就都可以打开整理相关的知识点。
参考:
https://segmentfault.com/a/1190000012650596
https://liuzhengyang.github.io/2017/04/18/innodb-mvcc/
MySQL技术内幕 InnoDB存储引擎
MySQL InnoDB 事务实现过程相关内容的概述的更多相关文章
- 搞懂MySQL InnoDB事务ACID实现原理
前言 说到数据库事务,想到的就是要么都做修改,要么都不做.或者是ACID的概念.其实事务的本质就是锁和并发和重做日志的结合体.那么,这一篇主要讲一下InnoDB中的事务到底是如何实现ACID的. 原子 ...
- Mysql InnoDB事务
http://www.cnblogs.com/benshan/archive/2013/01/19/2867244.html 事务的四个特性 1.原子性(atomicity)原子性是指整个数据库事务是 ...
- mysql innodb事务的ACID及其实现的保证机制
MySQL事务的ACID,一致性是最终目的.保证一致性的措施有:A原子性:靠undo log来保证(异常或执行失败后进行回滚).D持久性:靠redo log来保证(保证当MySQL宕机或停电后,可以通 ...
- MySql - InnoDB - 事务 , Php版
(出处:http://www.cnblogs.com/linguanh/) 1,前序 由于要重构APP(社交类) 服务端接口的部分代码,故接触到了 innoDB,以及事务这个词,下面主要是以例子的形式 ...
- 一文快速搞懂MySQL InnoDB事务ACID实现原理(转)
这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...
- MySQL——InnoDB事务
事务:全部成功 或 全部失败! ------------------------------------------------------------------------------------ ...
- MySQL InnoDB四个事务级别 与 脏读、不反复读、幻读
MySQL InnoDB事务隔离级别脏读.可反复读.幻读 希望通过本文.能够加深读者对ySQL InnoDB的四个事务隔离级别.以及脏读.不反复读.幻读的理解. MySQL InnoDB事务的隔离级别 ...
- MySQL InnoDB 实现高并发原理
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...
- mysql数据库事务详细剖析
在写之前交代一下背景吧! 做开发也好久了,没怎么整理过知识,现在剖析一下自己对数据库事务的认识,以前用sqlserver,现在转java后又用mysql.oracle.我这块就主要解释一下mysql数 ...
随机推荐
- 用 EPWA 写一个 图片播放器 PicturePlayer
用 EPWA 写一个 图片播放器 PicturePlayer . 有关 EPWA,见 <我发起并创立了一个 EPWA 的 开源项目> https://www.cnblogs.com ...
- netty原理解析
netty主要采用的是reactor模式(事件)驱动模型,以下主要对reactor进行总结: C/S架构可以抽象为如下模型: C就是Client(客户端),上面的B是Browser(浏览器) S就是S ...
- SpringBoot启动源码探究----configureHeadlessProperty()方法
该方法只做了一件事:设置了一个名为java.awt.headless的系统属性,源码如下: private void configureHeadlessProperty() { System.setP ...
- JNDI是什么
参考文章:---为什么 追本溯源 http://www.cnblogs.com/xx0405/p/5332198.html jndi在Spring和tomcat下的使用: https://www.cn ...
- 'pip' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
之前python2.7是没有pip的,需要安装python3.6 以上. 但是安装3.6版本后,还是一样.官网提示需要执行以下命令:python -m ensurepip --default-pip ...
- [UE4]让箭头保持水平的第二种方法:Combinrotators、Delta(Rotator)
一.手柄在世界坐标系中有一个绝对朝向,我们可以知道箭头相对于手柄的朝向,相对于手柄的旋转角度. 可以通过手柄绝对朝向.箭头的相对于手柄的朝向计算得到箭头的绝对朝向. 在得到箭头的相对于手柄的角度,在这 ...
- html字体加大标签与写法介绍
在html中字体加大的标签为<big>,一般用于重要文字,醒目文字,让用户容易看到! 字体加大: <big>写上你想写的字</big> 效果:未加大 加大 效果中 ...
- 给Linux系统新增加一块硬盘
今天公司测试Linux服务器硬盘不够用了,主要是mysql数据文件太大了,买了个500G的硬盘回来,这里记录下新加硬盘的方法PS 测试服务器的主板太差劲了,没有多余的电源接口,只能把光驱的电源拿出来, ...
- idea中使用github
转载:https://www.cnblogs.com/javabg/p/7987755.html 1.先安装git插件,本机安装git在C:\InstallSoftWare\Git 2. 在Idea ...
- 转:VB.NET Office操作之Word
在这里给出了一个Word操作的类,该类具备了对word 文档操作的基本功能,包括word 文档的新建,打开,保存,另存,插入图片,插入表格,插入文字,读取文字,定位光标位置,移动光标,移动到指定页等等 ...