You were brought to this page based on an internet search
and as a free service to Oracle DBAs.
The text below is an except from the book,
Oracle Performance Firefighting, written by
Craig Shallahamer of
OraPub, Inc.
Figures and tables are not included on this page, only their reference.
To order the book in either print or PDF form, click
here.
©2009, 2010 by Craig Shallahamer. This is copyrighted material.
PleaseOut of respect for those involved in the creation of the book and also for
their familes, we ask you to respect the copyright both in intent and deed. Thank you.
-------------------------------
Each Oracle data block is created with a specific number of ITLs. The initial number of ITLs is controlled by the table's initrans space parameter and can be queried from the dba_tables view's ini_trans column. Starting with Oracle9i, the default ini_trans value is 1, yet a simple block dump clearly shows two ITLs are always created. With two ITLs, a single block can be subjected to two concurrently active transactions.
Suppose a third transaction wants to change a unlocked row in a block with only two ITLs. The third transaction's server process will try to dynamically create an additional ITL. However, the server process must first ensure the maximum number of ITLs (max_trans) will not be exceeded and also that there is free space available in the block. If the server process cannot create an additional ITL, it will post a TX enqueue wait, and the process will patiently wait. To reduce the likelihood of this occurring, both the default value and the maximum number of ITLs a single block can contain are set to 255. While the value cannot be exceeded, it can be reduced by issuing a simple alter table command.11
Once an ITL has been created in a data block, pushing deeper into the block's free space, the only way to get the space back is to re-create the entire table. Altering the space parameters will not affect ITLs already created. This is why the default number of ITLs is set to 1 (again, two are actually created) and the maximum it set to 255. If the block's concurrency requires more than a few ITLs, Oracle would rather the space be consumed than stall a transaction while posting the TX enqueue wait event.
©2009, 2010 by Craig Shallahamer. This is copyrighted material.
PleaseOut of respect for those involved in the creation of the book and also for
their familes, we ask you to respect the copyright both in intent and deed. Thank you.
|