|
本帖最后由 miniid1 于 2014-1-6 09:13 编辑
1、什么是IMU?
In Memory Undo
2、在哪些场景下不会使用IMU特性?(Oracle10g出现了IMU,默认开启IMU)
打开辅助日志
开启FLASHBACK DATABASE
事务过大
RAC
非AUM
3、如何手动关闭IMU?
set _in_memory_undo to false
4、谈谈一条UPDATE语句从第一步到第九步的整个过程?在IMU模式下对REDO日志做DUMP分析(上图所示:IMU模式的REDO格式)。
1.要更改的值存PGA
2.在imu中生成undo change vector,保存前镜像
3.在private redo中生成数据块的redo change vector
4.apply redo change vector 到 数据块
5.apply undo change vector 到 undo block(这个好像不对,commit时才应用?)
6,7 session commit时,合并private redo中的redo change rector 和IMU中的 undo record到public log buffer
8. session 等待lgwr写出log buffer到redo,写完session 返回
9. dbwr 在适当时候写出data block & undo block到data files
REDO日志做DUMP分析: 过2天有空时再来分析吧
5、IMU的主要作用是什么,也就是说为了解决什么问题?
IMU:
缓存undo change record,避免频繁读写undo block带来的性能问题,避开了buffer cache 一套繁琐的块管理机制(latch,pin,etc)。
a.apply 同一块undo block上的多个change vector只需一次写,不用想以前那样多次写。
b.构造CR block时,只需使用IMU,不需要访问undo block.
和private redo strand相互配合:
commit时批量写出到log buffer,减少几个log buffer相关的latch竞争(redo copy & redo allocation).
合并N个change vector为一个redo record,可以省去M个redo record header,减少redo size
解决问题: 性能问题:)
|
|