|
原帖由 eagle_fan 于 2008-11-28 23:31 发表 ![]()
I didn't mean "No" redo. Let me explain more about my thoughts.
In traditional undo mode, redo has two major parts:
1. data block changes
2. Undo block changes.
For IMU, you don't see the second part in v$sesstat since it doesn't write to undo segments at that time. Instead it stores these undo information in shared pool. If you check v$sesstat, you will see the redo size is reduced. I did a test before, the redo size in v$sesstat of a single row update was reduced by 17%(the percentage depends on your DML). But when the undo information in IMU nodes are flushed to undo segments, they still have to be recorded in redo. I don't think oracle will reduce the bundling write size since the undo entry in undo segments should be same as traditional undo mode. So the total redo size don't change.
BTW: I don't see visible CPU benefits of IMU in our production system. (10.2.0.3 version, typical OLTP system).
So you're saying that when people say IMU reduces redo, that's just because they didn't wait long enough for the "undo block changes" part of the redo gets flushed. When it's flushed, the total size jumps up to the level comparable to that for non-IMU. Very good point. I wonder, though, Have you checked 'redo wastage' with and without IMU on a typical OLTP database? Would that come down with IMU?
At the end of Craig's paper, he shows a benchmark and concludes that IMU reduces CPU time but not statistically significant elapsed time. I give more credit to real-life systems than a benchmark. But it helps to examine why a crafted benchmark does not reproduce what's happening in real-life.
Yong Huang |
|