14.3 InnoDB Multi-Versioning InnoDB 多版本

InnoDB 是一个多版本的存储引擎,它保持信息关于改变的数据老版本的信息,

为了支持事务功能比如并发和回滚。

这些信息是存储在表空间在称为一个rollback segment(Oracle类似的数据结构).

InnoDB 使用信息在回滚段来执行undo 操作在事务回滚时。

它也使用信息来创建记录的早期版本用于一个一致性读

内部的, InnoDB 增加3个字段到每个存储的行在数据库里.

一个6字节的DB_TRX_ID字段表明事务标识用于最好的事务插入或者更新记录。

此外, 一个删除是内部对待为一个update 一个指定的bit在记录内是被设置标记为删除。

每个记录包含一个7字节的DB_ROLL_PTR  字段称为  roll pointer. 

回滚指针指向一个undo 日志记录 写到回滚段。

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

一个6字节的DB_ROW_ID 字段包含一个row ID 单调增加作为新的记录被插入。

如果InnoDB自动生成一个聚合索引,index 包含row ID 值。 否则, DB_ROW_ID 列不出现在任何索引里

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

Insert undo logs 是只有在事务回滚时需要,并且可以在事务提交时丢弃。

Update undo logs 是用于一致性读,

但是它们只有在目前没有事务 InnoDB已经分配一个快照在一致性读需要信息在update undo log 来创建一个

定期的提交你的事务,包含那些事务用于一致性读。

否则, InnoDB 不能丢弃数据从update undo logs, rollback segment 会变的很大,填满你的表空间

一个undo log 在回滚段的物理大小是典型的小于相应的插入或者更新的记录。

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

在InnoDB 多版本策略中,一个记录不是物理删除的从数据库中 当你删除它使用SQL语句。

InnoDB 只是物理的移动相应的记录和它的索引记录 当它丢弃update undo log 记录update undo log 记录。

这个称谓一个purge, 它是非常快的

如果你插入和删除记录以小的匹配以同样的速率, 清除线程可以开始滞后,表的记录会变的越来越大 

因为所有的"dead"记录.

多版本和次要索引:

InnoDB 多版本并发控制(MVCC) 对待seconady indexes 不同于clustered indexes.

记录在一个 clustered index 是原地更新, 它们隐含的系统列指向undo log entries 从记录的早期版本被重构。

不像clustered index records, 

secondary index records 不包含隐藏的系统列 也不是原地更新

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

新的记录被插入, 标记的记录最终被清理。

当一个 secondary index record  是标记为删除或者 secondary index page 是被一个新的事务更新,

InnoDB 查询数据库记录在 clustered index.

在 clustered index,记录的DB_TRX_ID 是被检查,当前记录的版本是从undo log 检索

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

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

覆盖索引技术就不能使用。

14.3 InnoDB Multi-Versioning InnoDB 多版本的更多相关文章

  1. 14.1.3 Turning Off InnoDB 关掉InnoDB

    14.1.3 Turning Off InnoDB 关掉InnoDB: Oracle 推荐InnoDB 作为首选的存储引擎用于典型的数据库应用,从单用户的wikis到博客, 到高端应用把性能推到极限. ...

  2. 14.6.1 Creating InnoDB Tables 创建InnoDB 表:

    14.6.1 Creating InnoDB Tables 创建InnoDB 表: 创建一个InnoDB 表,使用CREATE TABLE 语句,你不需要指定 ENGINE=InnoDB子句 如果In ...

  3. 14.8.1 Creating InnoDB Tables 创建InnoDB 表

    14.8.1 Creating InnoDB Tables 创建InnoDB 表 创建一个InnoDB表,使用CREATE TABLE 语句,你不需要指定ENGINE=InnoDB 子句 如果Inno ...

  4. 14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小

    14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小 这个章节描述如何增加或者减少 InnoDB 系统表空间的大小 增加InnoDB ...

  5. 14.6.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB 主线程IO 速率:

    14.6.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB 主线程IO 速率: 主线程 在InnoDB 是一个线程 执行各种任务在后台. ...

  6. 14.6.3.5 Configuring InnoDB Buffer Pool Flushing

    14.6.3.5 Configuring InnoDB Buffer Pool Flushing InnoDB 执行某些任务在后台, 包括脏叶的刷新(那些已经发生改变的pages 但是没有写入到数据文 ...

  7. 14.6.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预取

    14.6.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预取 一个预读请求是一个I/ ...

  8. 14.6.3.1 The InnoDB Buffer Pool

    14.6.3.1 The InnoDB Buffer Pool InnoDB 保持一个存储区域被称为buffer pool 用于cache数据和索引在内存里, 知道InnoDB buffer pool ...

  9. 14.5.5.1 An InnoDB Deadlock Example 一个InnoDB 死锁实例

    14.5.5.1 An InnoDB Deadlock Example 一个InnoDB 死锁实例 下面的例子演示了一个错误可以发生当一个lock 请求会导致一个死锁,例子设计2个客户端,A和B: J ...

  10. 14.5.5 Deadlocks in InnoDB

    14.5.5 Deadlocks in InnoDB 14.5.5.1 An InnoDB Deadlock Example 14.5.5.2 Deadlock Detection and Rollb ...

随机推荐

  1. "org.eclipse.wst.validation" has been removed

    导出maven工程遇到的问题,"org.eclipse.wst.validation" has been removed,还以为是工程本身的问题,后来发现是eclipse的问题. ...

  2. lucene4.5近实时搜索

    近实时搜索就是他能打开一个IndexWriter快速搜索索引变更的内容,而不必关闭writer,或者向writer提交,这个功能是在2.9版本以后引入的,在以前没有这个功能时,必须调用writer的c ...

  3. C#快速剔除字符串中不合法的文件名或者文件路径字符

    C#快速剔除字符串中不合法的文件名 string strFileName= "文件名称";  StringBuilder rBuilder = new StringBuilder( ...

  4. random.sample

    import random k = random.sample(xrange(0x41, 0x5b), 26) print k import random k = random.sample(xran ...

  5. 《HTML5 从入门到精通--7.6.3 单元格垂直跨度——rowspan》

    单元格除了能够在水平方向上跨列,还能够垂直方向上跨行.跨行设置须要使用rowspan參数. 语法 <td rowspan="单元格跨行数"> 语法解释 与水平跨度相相应 ...

  6. Android--图片的三级缓存策略

    三级缓存缓存(内存)--->本地磁盘---->网络1.首先看一下图片存储到本地磁盘 public class FileUtils { String path;//文件存储的地方 publi ...

  7. arm-linux移植MT7601Uusb无线网卡(小度wifi,360随身WIFI 2代)

    前段时间移植过RT3070.RT5370 http://blog.csdn.net/ofaith12345/article/details/24138399 发现各种arm移植都大同小异,所以就不要纠 ...

  8. java设计模式演示样例

    创建模式 1.工厂方法模式(Factory Method)  将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到详细的子类.大大提高了系统扩展的柔性,接口的抽象化处理给相 ...

  9. Android自动化测试之Monkey工具

    前言:Android自动化测试工具.方法和框架,包括android测试框架.CTS.Monkey.Monkeyrunner.benchmark.test tool等. 一. 什么是MonkeyMonk ...

  10. mysql @变量和变量的区别及怎么判断记录唯一性

    DELIMITER// drop PROCEDURE if EXISTS test.express; create PROCEDURE test.express() BEGIN ) into @a f ...