ITPub博客

首页 > Linux操作系统 > Linux操作系统 > something about Undo

something about Undo

原创 Linux操作系统 作者:dukope 时间:2010-11-23 21:23:24 0 删除 编辑

Undo段
对于insert操作,回滚段只需要记录插入的rowid,回退时根据rowid删除记录
对于update操作,回滚段只需要记录被更新字段的旧值即可(前镜像),回退时通过旧值覆盖新值
对于delete操作,回滚段记录整行的数据,回退时通过反向(insert)操作恢复删除数据
所以此三者操作insert将产生最少的undo,update次之,delete最多

修改记录步骤:
1,事务开始时,在回滚段上分配一个事务槽
2,在数据块头部获取一个ITL事务槽,该事务槽指向回滚段的事务槽
3,修改数居前,记录前镜像信息,并以undo record的形式记录在回滚段中,回滚段事务槽指向该记录
4,锁定修改行,修改行锁定位(lb-lock byte)指向ITL事务槽
5,进行数据修改

-------------------------------------------------

修改数据后,commit,oracle将回滚段上的事务信息标记为inactive,并释放锁信息,ITL事务信息

数据块上存储了ITL和锁定等事物信息,oracle必须在事务提交之后清楚这些事务数据,这就叫做块清除

如果修改的数据任然在Buffer Cache中,那么oracle可以立即清除ITL信息,这叫快速清楚 fast block cleanout,不过有一个限制,如果修改的块数据量超过Buffer Cache的10%,则超出不份不立即清除,而是选择延迟清楚(delayed Block Cleanout),修改的数据如果已经被写到数据文件上,oracle也会选择延迟清除,从而提高性能

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24217871/viewspace-679680/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: oracle sql tuning
请登录后发表评论 登录
全部评论

注册时间:2010-07-09

  • 博文量
    36
  • 访问量
    56078