Re: How are ITL entries banked?

  • From: "vit\.spinka" <vit.spinka@xxxxxxxxxxxx>
  • To: oracle-l@xxxxxxxxxxxxx
  • Date: Fri, 8 Jan 2010 18:01:15 +0100

Hi Martin,

the acutal algortihm is in fact a bit complicated; if I simplify it, then the 
ITL is blanked by the DML session only if the block is still in the cache. This 
is the "fast commit" cleanout.
If it's already on the disk, than it's blanked by any other session that reads 
it from the disk next time. The session checks the undo if the referenced XID 
is till active; if not, the commit SCN of that XID is used to blank the ITL. If 
the XID is no longer in undo, we can safely assume the transaction already 
commited and blank the ITL as well (using lowest SCN of any active 
transaction). This is the "delayed block cleanout".

Note that blanking the ITL also involves setting the commit SCN of that 
particular row, so we can properly answer any read-consistent queries.

Further details are described at http://www.jlcomp.demon.co.uk/cleanout.html .

Vit Spinka

Other related posts: