Defer_Index_Updates
Nodefer_Index_Updates
The Defer_Index_Updates qualifier specifies that non-unique
indexes (other than those that define the placement information
for data in a storage area) will not be rebuilt until commit
time.
Use of this qualifier results in less I/O and fewer lock
conflicts than when index builds are not deferred, but results
in a total failure of a load operation if any lock conflicts
are encountered. In such a case, the entire load operation is
rolled back to the previous commit and you must repeat the load
operation. (Record insertion recommences at the beginning of
the input file). For this reason, you should only use the Defer_
Index_Updates qualifier when all of the following are true:
o You specify the Noconstraints qualifier (or you have dropped
constraints, or no constraints are defined on the table).
o You have dropped triggers from the table (or triggers are not
defined for the table).
o No other users are accessing the table being loaded.
Also be aware that required virtual memory can be quite large
when you defer index updates. Required virtual memory is directly
proportional to the following:
o The length of the Ikeys in the indexes being deferred
o The number of indexes being deferred
o The value for n specified with the Commit_Every qualifier
You can estimate the amount of virtual memory required for each
deferred index using the following formula, where:
o n = the value specified with the Commit_Every qualifier
o I = (length of the Ikey + 50)
n * (I * number_defered_ikeys)
The Nodefer_Index_Updates qualifier is the default. When you
specify the Nodefer_Index_Updates qualifier (or accept the
default), both the indexes that define the placement information
for data in a storage area and any other indexes defined on the
table being loaded are rebuilt at verb time.
This can result in a managed deadlock situation when the Parallel
qualifier is specified. The following describes such a scenario:
o Executor_1 locks index node A in exclusive mode
o Executor_2 locks index node B in exclusive mode
o Executor_1 requests a lock on index node B
o Executor_2 requests a lock on index node A
In such a situation, Oracle Rdb resolves the deadlock by
directing one of the executors to commit the data it has already
stored. This resolves the deadlock situation and the load
operation continues.