Re: Doubt related do INITRANS

From: Eriovaldo Andrietta <>
Date: Wed, 16 Dec 2020 22:35:40 -0300
Message-ID: <>

I got the message.
I consider not using ITL x 2 for indexes. In my situation the lock is not automatic, it is forced for update via application code.
Imagine an application server submitting lots of requests for DML on a table for the same line. for example id = 10. For each submit the database does the select for update where id = 10 (all sessions use the same id) and does the commit for each submit. A requested line stays locked for a bit time until commit and after it the line is released for the next requester session. If this situation is considered as concurrency for DML operation in the same line/block, so I understand that I need more ITL pre-allocated.

Thanks for the answer.

Em qua., 16 de dez. de 2020 às 18:21, Powell, Mark <> escreveu:

> The manual says one ITL for a table but the last time I checked via a
> block dump there are actually two. I do not know where you got the rule
> that an index should have the table number of ITL X 2 but that is not
> necessary. Only sessions that perform DML need to allocate an ITL.
> Readers just check the ITL to find the UNDO version of rows when
> necessary. Oracle will attempt to automatically add an ITL when needed.
> Pre-allocation guarantees N number of concurrent DML sessions can access
> the block and if you expect only 1 or 2 concurrent updaters will access a
> block concurrently then the default value of two for the index is
> adequate. Otherwise you should not need to pre-allocate more ITL's that
> you expect concurrent update sessions to access the block in either the
> table or its indexes.
> Mark Powell
> Database Administration
> (313) 592-5148
> ------------------------------
> *From:* <> on
> behalf of Eriovaldo Andrietta <>
> *Sent:* Wednesday, December 16, 2020 3:46 PM
> *To:* ORACLE-L <>
> *Subject:* Doubt related do INITRANS
> Hi,
> I saw in the database and documentation that For tables INITRANS is equal
> to *1* and for indexes, 2.
> Doubts are :
> a.) for indexes, We always must use the number used by table * 2 ??
> b.) Imagine that I have an initrans 10 for a table and 20 for indexes of
> this table (the table can have one or more than one ).
> And an applicationI execute select for update for 1 line in different
> sessions , like this, with purpose to retrieve a number
> select number_seq into seq from table_a where id = 10 for
> update;
> commit;
> It causes a lock. This table works like a database sequence.
> Think in simultaneous connections and a lot of transactions.
> When the commit is executed , the lock is released.
> Doubts here are :
> b1.) What is the advantage to configure initrans equal to 10 and
> indexes equal to 20 for this table ???
> b2.) What is different in this case doing commit line by line if I
> had INITRANS equal 1 for table and 2 for indexes ?
> Regards
> Eriovaldo

Received on Thu Dec 17 2020 - 02:35:40 CET

Original text of this message