IMU机制的意义:加块构造CR块的效率以及加块回滚效率,最关键的是减少了物理IO。
#要知道undo表空间与数据库其他表空间管理是一致的,都会被DBWR写回磁盘。
如果我们需要undo块构造一致性读时,但此时undo块已经被写回磁盘,如果此时Oracle再将undo块读入到buffer时,十分影响性能。
事务开始时在Shared pool中分配IMU buffer,将全部的回滚信息写入到IMU buffer,需要undo块时,直接读取IMU buffer。
IMU buffer的变化也会产生redo,也可以实例恢复,但是IMU buffer产生的redo不在redo buffer中产生,要知道buffer cache中产生redo的过程是,现在PGA中生成后映像,然后传到redo buffer中,有LGWR写入。
而IMU buffer产生的日志不是在PGA中产生,是在share pool中产生,Oracle会在share pool中分配 Private redo strands(redo buffer区)用于IMU buffer使用。
当IMU buffer快满时,也会被写回到buffer cache中的undo块中。
select * from v$sysstat where name like ‘%IMU%’
IMU COMMIT:
当commit时,IMU buffer往buffer cache中写, Private redo strands往redo buffer 中写。
IMU FLUSH :
当IMU BUFFER快满时,往buffer cache中写。