Description:
TSMAN handles extents
DBTUP receive information about an allocated extent and uses this
information to print debug information.
There is however one use case where the extent_no stored in DBTUP is used to
find the extent. This is in restart_setup_page. This function uses the extent_no
to search in the hash in DBTUP. Since the extent_no in DBTUP is stored in a 16-bit
variable it means that with more than 64k extents in a fragment we will have more
than one entry in the hash table with the same hash key. Thus the extent we lookup
in the hash table could potentially be the wrong extent.
How to repeat:
Found through code inspection.
But create TABLESPACE with small extent size, e.g. 1 MB. Then create a data file
which has more 64k extents. Thus e.g. 256 GB => 256k extents.
Finally create a table with 1 partition.
Next run some benchmark against the table that ensures that we get lots of writes
to all sorts of pages.
Not sure what problems one will see though.
Suggested fix:
Ensure that extent_no is stored in DBTUP in 32-bit variable, thus cannot be stored
in Local_key.