InnoDB Undo Log
- 简介
Undo Log包含了一系列在一个单独的事务中会产生的所有Undo Log记录。每一个Undo Log记录包含了如何undo事务对某一行修改的必要信息。InnoDB使用Undo Log来进行事务的回滚和MVCC机制。在逻辑存储上,Undo Log位于Undo Log 段中,后者位于回滚段(roll back segments)中。在目前的最新版本中,会馆段不仅仅可以位于系统表空间(例如data目录下面的ibdata1文件就是一个系统表空间)、临时表空间,也可以通过配置放置到undo 表空间中。InnoDB支持128个回滚段,其中32个用于临时表的事务。剩下的96个,每一个支持1023个并发数据修改事务。
2. Undo Log物理结构
Undo Log的物理结构可以直接参照博文 :
http://insidemysql.blog.163.com/blog/static/2028340422013325115250722/
http://insidemysql.blog.163.com/blog/static/202834042201341011347494/
其中有两个疑惑点:
一是第二篇博文中 UPDATE t SET c=2 WHERE a=1; 语句的说明中,写道:列的值(a=1),我认为是作者的笔误,应该是 c=1;
二是 80 00 01这是表示值为1,这里应该是InnoDB特殊处理了(猜测,可能是1开始表示为正数),作者说80 00 01表示为1是因为计算机中存储的是有符号整数,但是1的有符号int表示形式应该是 00 00 01。
3.Undo Log逻辑内容
光看Undo Log的物理结构可能有点不好理解,这里讲解一下自己的理解。考虑下面这样的一些SQL。
CREATE TABLE my_tb(
id int auto_increment,
name varchar(255) not null,
sex varchar(255) not null,
primary key(id),
key(name)
) #事务一开始 插入一条数据 假设id=1 提交
BEGIN;
INSERT INTO my_tb(name,sex) values('a','boy');
COMMIT; #事务二开始 删除操作 不提交
BEGIN;
DELETE FROM my_tb WHERE id=1;
#回滚不提交
ROLLBACK; #事务三开始 更新操作
BEGIN;
UPDATE my_tb set name='b' where id=1;
事务一在提交之前,会有一条这样子的Undo Log:
插入了一条id=1的记录 。
是的,插入语句中的undo log只会记录 unique key(应该包括主键和所有的唯一键,猜测未证实,主键肯定是有的),而不包括其他字段的信息。
事务二提交之前,会有一条这样子的Undo Log:
删除了一条id=1的记录,他的name为a,他的sex为boy。
这时候不仅仅会记录主键,也会记录所有字段的值。
事务三提交之前,会有一条这样子的Undo Log:
更新了一条id=1的记录,他的name为a。
注意这时候记录的name不是b,而是a。
为什么Undo Log翻译过来是这样子的?其实思考一下Undo Log是用来做什么的就知道了。Undo Log被用于回滚和MVCC,两者都需要恢复或者获取到之前版本的信息。
如果你插入了一条数据,通过插入数据的Undo Log中唯一索引字段和值查找到对应的记录,然后进行删除(回滚时)或者忽略(MVCC);
如果你更新了了一条数据,找到对应的记录之后,通过记录的原始值(name='a')恢复成原来的记录;
如果你删除了一条数据,那么就需要完整的记录信息,才能进行回滚和恢复。
当然,Undo Log中记录的信息不像我说的这么简单,具体的信息还是查看上面的两篇博文,从物理结构中理解Undo Log。另外,Undo Log中提供的信息其实不是完整的,如果你的系统故障,导致已经提交的事务涉及的记录没有刷新到磁盘而丢失更新,这时候就需要redo log和 double write buffer一起配合进行恢复了。
InnoDB Undo Log的更多相关文章
- InnoDB undo log物理结构的初始化
水平有限,如果有误请指出.一直以来未对Innodb 的undo进行好好的学习,最近刚好有点时间准备学习一下,通过阿里内核月报和自己看代码的综合总结一下.本文环境: 代码版本 percona 5.7.2 ...
- 14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间
14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间 在MySQL 5.6.3,你可以存 ...
- 日志:Redo Log 和 Undo Log
本篇文章主要介绍 Redo Log 和 Undo Log: 利用 Redo Log 和 Undo Log 实现本地事务的原子性.持久性 Redo Log 的写回策略 Redo Log Buffer 的 ...
- InnoDB事务日志(redo log 和 undo log)详解
数据库通常借助日志来实现事务,常见的有undo log.redo log,undo/redo log都能保证事务特性,undolog实现事务原子性,redolog实现事务的持久性. 为了最大程度避免数 ...
- 【msql】关于redo 和 undo log
InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性.和大多数关系型数据库一样,Inno ...
- 14.2.4 InnoDB Undo Logs
14.2.4 InnoDB Undo Logs : 一个Undo log (或者成为回滚段) 是一个存储区域 持有被活动事务修改的数据的copy. 如果另外的事务需要看原始的数据(作为一致性读操作的一 ...
- 说说MySQL中的Redo log Undo log都在干啥
在数据库系统中,既有存放数据的文件,也有存放日志的文件.日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件. MySQL中的日志文件, ...
- 5分钟了解MySQL5.7的undo log在线收缩新特性
Part1:写在最前 在MysQL5.6版本中,可以把undo log 回滚日志分离到一个单独的表空间里:其缺点是不能回收空间大小,until MysQL5.7,but MariadDB10.1暂不支 ...
- 数据库原理 - 序列5 - 事务是如何实现的? - Undo Log解析
本文节选自作者书籍<软件架构设计:大型网站技术架构与业务架构融合之道>.作者微信公众号:架构之道与术.公众号底部菜单有书友群可以加入,与作者和其他读者进行深入讨论.也可以在京东.天猫上购买 ...
随机推荐
- Flask01 初识flask、flask配置
1 什么是flask Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 百度百科:点击前往 中文文档: ...
- Redis[三] @Hash 哈希
Redis的哈希值是字符串字段和字符串值之间的映射,所以他们是表示对象的完美数据类型 在Redis中的哈希值,可存储超过400十亿键值对. redis 提供了2套操纵 一种是批量 一种是非批量 假设需 ...
- TC358775XBG:MIPI DSI转双路LVDS芯片简介
TC358775XBG是一颗MIPI DSI转双路LVDS芯片,通信方式:IIC/MIPI command mode,分辨率1920*1200,封装形式:BGA64.
- 原创: rsync软件服务利用ansible实现一键化部署
---恢复内容开始--- 首先创建一个脚本文件 /server/tools/peizhi.sh cat /server/tools/peizhi.sh cat >>/etc/rsyncd ...
- Maven简述
一.前言 以前做过的项目中,没有真正的使用过Maven,只知道其名声很大,其作用是用来管理jar 包的.最近一段时间在项目过程中使用Maven,用Maven构建的web项目,其项目结构只停留在 ...
- 《个人-GIT使用方法》
使用GIT版本控制工具及基本使用方法(安装,新建,推送,拉取),托管平台的使用方法. Git 常用命令 git init here -- 创建本地仓库(repository),将会在文件夹下创建一个 ...
- ASP.NET Core的身份认证框架IdentityServer4(8)- 使用密码认证方式控制API访问
前言 本文及IdentityServer这个系列使用的都是基于.net core 2.0的.上一篇博文在API项目中我使用了icrosoft.AspNetCore.Authentication.Jwt ...
- Linux Centos 6.9中SSH默认端口修改的坑
关于Linux Centos6.5的SSH默认端口修改的博客有一大堆,我在这里就不啰嗦了,但是面对Centos 6.9,就会发现有一个巨坑: 修改iptables之后执行下面的命令后: # servi ...
- JS自定义对象以及相关成绩系统完整案例演示
[自定义对象] 1.基本概念 ①对象是拥有一系列无无序属性和方法的集合 ②键值对:对象中的数据,用以键值对的形式存在,对象的每个属性和方法,都对应一个键值,以键取值 ③属性:描述对象特征的一系列变量称 ...
- HTML5新增web存储方式
客户端存储数据的两个对象为: 两个对象在使用方式没有任何区别,唯一的不同点蚀储存数据 的有效时间 ①localStorage - 没有时间限制的数据存储 除非手动删除,否则数据将一直保存在本地文件: ...