 |
|
Oracle sequence caching & performance
Oracle Database Tips by Donald Burleson |
Question: How to I cache an Oracle sequence for faster
performance. Can a sequence cache be used for tuning?
Answer: Oracle has a method for caching frequently-referenced
sequences, and you can also cache sequences with n-way Streams replication for
fast access to sequence values. Caching sequences is especially important
for high-DML applications with lots on insert and update activity.
Caching an Oracle sequence
You can easily cache as sequence with the "add/alter
sequence xxx cache" command. The "cache" clause caches the specified
number of sequence values into the buffers in the SGA. This speeds access, but
all cached numbers are lost when the database is shut down. The default value is
20; maximum value is maxvalue-minvalue.
Delays from sequence cache enqueues
If there is insufficient caching of sequences,
contention can result which will show up as an increase in service times for
DML. If there are performance problems due to sequence cache waits, examine the
row cache locks statistics in the v$system_event view to determine whether
the problem is due to the use of Oracle sequences.
In RAC, sequence enqueue delays are shown in the eq_type column of the
gv$enqueue_stat view. A value of "SQ Enqueue" indicates that
there is contention for sequences.
When creating sequences for a RAC environment, DBAs should use the NOORDER
keyword to avoid an additional cause of SQ enqueue contention that is forced
ordering of queued sequence values.
To reduce
index contention for RAC environments you may also want to use the cache
option and also ensure that you have the default value of noorder for
your sequences.
Also, see my notes on
tuning to reduce index
contention.
 |
If you like Oracle tuning, see the book "Oracle
Tuning: The Definitive Reference", with 950 pages of tuning tips and
scripts.
You can buy it direct from the publisher for 30%-off and get
instant access to the code depot of Oracle tuning scripts. |