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. struts2入门程序

    struts2入门程序 1.示例 搭建编程环境就先不说了,这里假设已经搭建好了编程环境,并且下好了strut2的jar包,接下来程序. 1.1 新建web项目 点击File->New->D ...

  2. Nginx优化具体,应对高并发

     nginx指令中的优化(配置文件) worker_processes 8; nginx进程数,建议依照cpu数目来指定.一般为它的倍数. worker_cpu_affinity 00000001 ...

  3. Flashback Query、Flashback Table(快速闪回查询、快速闪回表)

    Flashback Query闪回查询 flashback query是基于undo表空间的闪回,与之相关的参数如下: SQL> show parameter undo NAME         ...

  4. 实现ARC文件与MRC文件互转,和混合使用。

    这段时间做项目是以MRC为主的 但是某些第三方现在都只能支持ARC了 找到了这篇文章 可谓是帮了大忙 亲测完全可用喔:-O 如何在未使用arc的工程中引入一个使用了arc特性的文件,如何在arc工程中 ...

  5. Android开发ScrollView上下左右滑动事件冲突整理一(根据事件)

    主要通过重写 onInterceptTouchEvent 事件来解决,代码如下: package com.cm.android.pad.view.itemView; import android.co ...

  6. Asp.net 主题

    设定主题: 右击网站,选择添加ASP.NET文件夹,选择主题.系统默认将文件夹命名为App_Themes,我们在这个文件夹下添加外观文件,在.skin后缀的文件中自定义我们想要的主题. 例如: < ...

  7. 在浏览器运行 java applet时遇到的一些问题及其解决方法

    运行 java applet时提示:您的安全设置已阻止本地应用程序运行,如何解决?如下图所示 这时候通过设置java的安全级别就可以了. 控制面板->程序->Java->安全 将安全 ...

  8. hibernate_validator_04

    对象图--个人觉得就是关联验证 ean Validation API不仅能够用来校验单个的实例对象,还能够用来校验完整的对象图.要使用这个功能,只需要在一个有关联关系的字段或者属性上标注 @Valid ...

  9. 8.模板方法模式-[Head First 设计模式]

    模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 要点: “模板方法”定义了算法的步骤,把这些步骤的实现延 ...

  10. 跟我学android-android常用布局介绍

    在上一章我们曾经谈到,Android平台的界面 是使用XML的方式设计的,然后在上一章我们只做了一个简单的界面,在这章,我们将介绍如何使用常用的控件设计实用的界面. Android中的视图都是继承Vi ...