We seem to have a performance issue with Table Sequences while running
inside container ( => external transaction controller). If multiple
threads try to do getNextValue() on a table sequence and our
preallocation bucket is empty and external transaction controller is
used, all of them can reach the code at line 468 of
SequencingManager.Preallocation_Transaction_NoAccessor_State.getNextValue()
which calls sequence.getGeneratedVector(...) . This would result in all
of them issuing an update statement to the sequence table and being
blocked out by database till preceding threads' transaction commits. The
code of Preallocation_Transaction_NoAccessor_State.getNextValue() is
explicitly written to not obtain locks around
sequence.getGeneratedVector(...) if running with external transaction
controller. There is fair amount of comment written but some how I am
still not able to figure out why we are not obtaining locks for this
case. Can some one familiar with history of the code comment on this.