|
wxz317 发表于 2013-9-11 15:18 ![]()
我知道oracle的commit之前的insert写redo和undo日志,但都是写在内存的logbuf中,commit的时候要保证当前 ...
这个地方你的理解有误。undo日志不是写在log buffer里面,是写在 undo segement里面。undo segment的修改,就像表的修改一样,会再次触发redo日志。也就是说一个更新涉及到2部分的redo.
lgwr和dbwr不是一回事,一个是写日志,一个是刷buffer。所以aio_o_说commit 不会触发dbwr(刷buffer),但是会触发lgwr(写日志)。正常情况下,不论前面的事务有多大,commit操作都是瞬间完成,因为需要做的就是在把log buffer 刷回磁盘和在回滚段头的事务表中记录提交字段,可能在某些情况下会涉及到快速块清除,但是有着严格的算法控制,不会有太多的代价,否则就用延迟块清除。 |
|