1,oracle延迟块清除是基于io性能的考虑而设计
2,设想一个UPDATE大量数据的操作,因为执行时间较长,一部分已修改的块已被缓冲池flush out写至磁盘,
当UPDATE操作完成执行COMMIT操作时,则需要将那些已写至磁盘的数据块重新读入,这将产生大量的io
3,针对上述情况产生延迟块清除
何时发生延迟块清除:
1,在更新过程中,被缓冲池flush out写至磁盘的块
2,若更新操作涉及的块超过了块缓冲区缓存的10%时,超出的部分块。
3,虽然commit不会对这些已flush到磁盘的数据块进行清除块itl标志操作;
但会修改回滚段的段头
回滚段的段头包括了段中的事务的字典,COMMIT操作将本事务转化为非ACTIVE状态。
4,当下一次操作如SELECT,UPDATE,INSERT或DELETE访问到这些块(已flush到磁盘的数据块时)时可能需要在读入后完成块清除,这样的操作称之为块延迟清除
5,具体如何操作呢?
1,块延迟清除通过事务槽上的回滚段号(已flush回磁盘并重读回buffer cache的数据块之itl),槽号等信息访问回滚段头的事务字典;
2,此时回滚段头的事务字典标记已是非active状态;则清除块上的itl相关信息
6,一般情况,延迟块清除多发生于select操作中
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-756754/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9240380/viewspace-756754/