Chinaunix首页 | 论坛 | 博客
  • 博客访问: 514448
  • 博文数量: 161
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1947
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-25 01:20
文章分类

全部博文(161)

文章存档

2011年(44)

2010年(47)

2009年(48)

2008年(22)

我的朋友

分类: Oracle

2011-03-09 13:38:46

Oracle in-memroy undo运作原理

Oracleundo的作用主要有两个:

第一是回滚事务

第二是产生一致性读。

同时也衍生出了一些新的 功能,比如Flashback query。传统的undo是通过undo segment来管理的,我们看下面的示例: 


事务开始

必须冲data block中分配ITL,ITL中记录了事务的ID(XID),

XIDXIDUSN(回滚段号) IDSLOT(回滚段槽 号XIDSQN(序列号组成

Undo segment header中有一个事务表,记录了该回滚段上的事务信息。每个事务都会占用一个事务 ,XID对应一个UBAundo block address

Undo segmet header uba则指向最后一个undo block,这是回滚的起始位置,如果事务需要回滚,只需要在undo segment header中的事务表中找到事务回滚的起始位置,然后通过undo链表,就可以依次回滚整个事务。 

每个data blockITL中也有个给UBA(是指向了该block对应的undo信息的起始位置 )block历经的最后一次改变所对应的undo record所在的UBA,用于读一致性,因为读一致性需要undo信息来构造一个CR block通过这个UBA就可以直接定位到block的回滚信息的起始位置,而不再需要通过undo segment header中的事务表。 

注意:所以Undo segmet header ubadata blockITLUBA可以不一致。

在传统的undo管理模式中,Oracle对于undodata block是一视同仁的,他们都需要首先读入到data buffer中进行修改,并都会产生redo信息,

修改的过程大致是:

产生undoredo,更改undo block

产生dataredo,修改data block

总之redo必须要先于数据被记录下来。

当数据库发生crash,可以通过redo日志,恢复dataundo block

然后再通过undo信息去回滚未提交的事务,保证数据的一致性

所以说instance recovery的过程是先前滚,再回滚的过程。 

统的undo管理有弊端

第一是undo信息如果不在data buffer中,必须首先从外部文件中读入

第二是undo的所有变化也必须同时记录redo,在事务提交时被写入到redo log中。

Oracle提出了In-Memory UNDO的新特性,将undo信息都存放在内存结构中,缓解传统undo管理中带来的开销。 

IMU

IMUshare pool 中分配一个内存空间 (IML pool)

每个新的事务都会分配一个IMU buffer,相当于一个私有的undo buffer,用来记录undo的信息通过IMU buffer中的信息就可以完成一致读,从而大大提升了效率。(这里要澄清一点,我在dump data block时,并没有发现指向IMU node的具体信息)。 


IMU模式下

undo信息依然会被写入到redo中,理解这点很重要!因为Instance recovery需要undo的信息去回滚未提交的事物,使数据库处于一致状态,如果redo中没有undo变化的信息,那么一旦发生Instance crash,数据库将有可能处于一个不一致的状态。 

事务开始会在data block中的分配ITL并且它依然会指向undo segment header的事物表 

undo block中的信息并不需要马上写入,这时undo信息是记录在IMU Buffer中的,这时也不会产生undo blockredo信息。 

在以下两种情况下,undo buffer中的信息才会写入到undo block

--IMU buffer空间不足 

--LGWRredo信息被写入到redo log中时(比如commit 

v$sysstat中可以看到IMU flushIMU commit,分别表示以上两种情况,如果你发现这两个值不断增加,代表系统开启了IMU特性。 



转载


阅读(816) | 评论(1) | 转发(0) |
0

上一篇:undo 管理一

下一篇:Oracle 系统包

给主人留下些什么吧!~~

chinaunix网友2011-06-05 01:47:07

大连法律咨询在线 http://www.fabowang.com 大连律师在线咨询 http://www.fabowang.com 大连法律顾问网 http://www.fabowang.com 大连律师咨询 http://www.fabowang.com