Over the last year I’ve written a short collection of articles describing how a defect in the code for handling index leaf (block) node splits can cause a significant waste of space in indexes that are subject to a high degree of concurrent inserts. Finally I can announce some good news – Oracle has a patch for the code.
The problem is described in MOS (the database formerly known as Metalink) under bug 8767925 which is reported as “fixed in version 12.1″.
Backports may become available – I’ve already asked for one for 11.1.0.7 on AIX for one of my clients (but it has been a little slow in arriving) and another client should have put in a bid for a backport to 10.2.0.4 (also on AIX) in the last couple of days.
Update (Sep 2013)
See comment 4 below: the fix doesn’t solve the problem completely, it’s a damage limitation step that seems to limit the number of ITL entries to something like 40 rather then letting you hit the maximum of 169. This still leaves you an opportunity to lose something like 800 bytes per leaf block if you’re running at a level of concurrency that means you could have 4 processes trying to update an individual block.