14.2.3 InnoDB Multi-Versioning innoDB 多版本

原创 2015年11月20日 18:10:46
14.2.3 InnoDB Multi-Versioning innoDB 多版本

InnoDB 是一个多版本存储引擎, 它保留信息关于老版本的更改的行,

为了支持事务的特性比如并发和恢复。

这个信息是存在表空间在数据目录叫做回滚段(Oracle类似的数据结构).

InnoDB 使用 回滚段的信息来执行回滚操作  。它也用于创建一致性读。


在内部, InnoDB 增加 3个域给每个行存储在数据库里,


A 6字节DB_TRX_ID 字段表示事务标示 对于最好的事务,插入或者更改记录。


一个删除内部处理为update ,指定的bit 在记录里被标记为删除。



每行业包含一个-位 DB_ROLL_PTR 域被称为roll pointer.


 roll pointer 指向一个undo log 记录 。


如果记录被更新,undo log 记录包含必要的信息来创建更新前的内容。


A  6-byte DB_ROW_ID 字段包含一个row ID  单调增加 被插入的新的记录。

如果 InnoDB 自动的产生一个clustered index ,index 包含row ID 值,

否则 DB_ROW_ID 列不出现在任何索引。

Undo logs 在回滚段 是被分隔成insert和update undo logs.


Insert undo logs 只被需要在事务回滚,可以被丢弃在事务提交的时候。

Updates undo logs 是用于一致性读,

它们消失只能在目前没有事务,InnoDB 已经分配一个快照,一致性读需要信息在update undo log 来创建数据库的一个早期的版

本。

提交你的事务,包括那些事务 只执行一致性读,否则,


InnoDB 不能丢失更新undo logs的数据, 回滚段 可能增加的更大,填满你的空间。


一个回滚日志记录在回滚段的大小通常是小于相应的插入或者修改的行。

你可以使用这个信息来计算你的回滚段的空间。



ibdata1存了什么?

当你启用了 innodb_file_per_table,表被存储在他们自己的表空间里,但是共享表空间仍然在存储其它的 InnoDB 内部数据:

数据字典,也就是 InnoDB 表的元数据
变更缓冲区
双写缓冲区
撤销日志


在InnoDB 多版本scheme,行不是立即从数据库物理删除的 当你删除它。


InnoDB 只有物理删除相应的记录和它的index records 当它 丢弃update undo log 记录

这种操作称为purge,它是很快的




Multi-Versioning and Secondary Indexes 多版本和Secondary 索引



InnoDB 的多版本的并发控制(MVCC) 对待secondary indexes 不同于clustered 索引。


记录在一个clustered 索引是被更新, 它们的隐藏的系统列指向undo log entries 早期的记录的版本被构建


不像clustered index records,  secondary index records不包含隐藏的列也不包含更新的地方。


当一个 secondary index 列被更新, 老的secondary index records 是删除标记的,


新的records 被插入,标记为删除的被最终删除。


当一个secondary index record 是被标记删除或者the secondary index page 被新的会话更新,


InnoDB 查找数据库记录在clustered index.在 clustered index,



记录的DB_TRX_ID 是被检查 记录的正确的版本是从Undo log 检索

如果记录被修改在读取事务被初始化后。



如果一个secondary index 记录是被标记为删除或者一个secondary index page被一个新的事务更新。


转换index技术是不能用的, 代替的是从index 结构返回值, InnoDB 在clustered index 中查询。























innodb 多版本并发控制原理详解

多版本并发控制技术已经被广泛运用于各大数据库系统中,如Oracle,MS SQL Server 2005+, Postgresql, Firebird, Maria等等,开源数据库MYSQL中流行...
  • aoxida
  • aoxida
  • 2016年02月18日 23:36
  • 2951

innodb的多版本控制

inndo也是通过跟oracle类似的回滚段来实现多版本,内部实现中,innodb会添加3个字段到数据库中的每个记录上,一个6byte的DB_TRX_ID表示最后插入或更新的行的事务标识符,删除在内部...
  • aoerqileng
  • aoerqileng
  • 2016年05月07日 13:36
  • 2142

《MySQL技术内幕:InnoDB存储引擎》第2版笔记

第1章 MySQL体系结构和存储引擎1.1 定义数据库和实例 在MySQL数据库中,数据库文件可以是fm、MYD、MYI、ibd结尾的文件。 MySQL数据库由后台线程以及一个共享内存区组成。 MyS...
  • youngsend
  • youngsend
  • 2015年09月24日 20:24
  • 2588

InnoDB事务、锁、多版本分析

  • 2015年04月12日 11:04
  • 1.22MB
  • 下载

MySQL 核心引擎InnoDB-事务锁多版本分析

  • 2017年04月11日 14:25
  • 2.02MB
  • 下载

MySQL官方文档 — InnoDB多版本控制译文

前言本篇文章为MySQL官方文档 — InnoDB多版本控制的译文,官方文档地址,纯平自己粗浅的英语功底和翻译软件进行翻译,如有问题,欢迎指正。14.3 InnoDB多版本控制InnoDB是一个多版本...
  • heroqiang
  • heroqiang
  • 2018年01月10日 09:31
  • 33

MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析

导读:   来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解Inno...
  • liaoyuanzi
  • liaoyuanzi
  • 2012年10月11日 14:38
  • 714

Mysql Innodb中undo-log和MVCC多版本一致性读 的实现

http://hi.baidu.com/gao_dennis/item/1f133311f50a94423a176ef5
  • fox1987
  • fox1987
  • 2014年08月03日 19:22
  • 1250

InnoDB多版本(MVCC)实现简要分析

http://hedengcheng.com/?p=148 基本知识 假设对于多版本(MVCC)的基础知识,有所了解。InnoDB为了实现多版本的一致读,采用的是基于回滚段的协议。 行结构 ...
  • bluetjs
  • bluetjs
  • 2016年09月26日 18:33
  • 164

Mysql Innodb中undo-log和MVCC多版本一致性读的实现(源码分析)

Mysql Innodb中undo-log和MVCC多版本一致性读  的实现    转载▼ 转自:http://blog.sina.com.cn/s/blog_4673e...
  • lidan3959
  • lidan3959
  • 2013年01月16日 16:36
  • 852
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:14.2.3 InnoDB Multi-Versioning innoDB 多版本
举报原因:
原因补充:

(最多只允许输入30个字)