log file switch (private strand flush incomplete)
private redo log strands
读eygle的《深入解析oracle》的时候看到了这个等待事件,eygle对此的解释是
从内存到redo log file的写出尚未完成”
因为提到这个等待事件的时候,说的正是10G引入的private redo log strands机制,所以当时我的理解是,等待shared pool中的PVRS中的内容写入online redo log file。问题1:隐约记得当时google了些文档,好像每个redo log file会提前划分一定的空间给PVRS的写出?
后来继续看书的时候,看到了imu(in memory undo),eygle书上提到
IMU机制与上一章提到的PVRS紧密相关,由于每个IMU Buffer的大小在64~128KB左右,所以仅有特定的小事务可以使用,每个事务会被绑定到一个独立空闲的IMU Buffer,同时相关的Redo信息会写入PVRS中,同样每个IMU Buffer会由一个独立的In Memory Undo Latch保护,当IMU Buffer或PRVS写满之后,数据库需要写出IMU中的信息。
于是又胡思乱想了,问题2:是不是PVRS只是记录IMU的redo信息?还有IMU的undo相关的redo信息都会写入PVRS?这样就可以保证IMU中的undo信息不会被丢失,否则instance recover的时候就麻烦了?
带着第二个问题,我继续google,看到了这么一段话(关于问题1提到的等待事件的描述):
when LGWR waits for DBWR to complete flushing redo from IMU buffers into the log buffer; when DBWR is complete LGWR can then finish writing the current log, and then switch log files.
看了更郁闷了,问题3:问题1中提到的等待事件是等待IMU buffer到log buffer的redo拷贝?IMU buffer中的不是undo么?怎么会往log buffer塞?而且和先前提到的eygle对这个等待事件的描述不太一致?我觉得是等待IMU buffer对应的PVRS中的redo内容flush到log buffer还容易理解点……
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27573546/viewspace-740768/ ,如需转载,请注明出处,否则将追究法律责任。