Prior to 9i, FREELISTS were used keep track of blocks
within an object which have enough free space to allow
insertion of a new row.
Administrators can define the number of FREELISTS and FREELIST
creating an object. The value of the parameter PCTUSED is used
to place a block in
and out of the FREELIST.
(a freelist is a one-way linked list, with NEXT pointers indicating
the data block addresses (say XXX) of the next free block.
In addition, when a block is added to the freelist, a flag in
the header of the free block is set to indicate that it is on
the freelist chain; another bucket in the block header will
contain the XXXX of the
next free block in the segment.)
The new mechanism makes the space management within an object
completely transparent by using bitmaps to track the space
utilization of each data block allocated to the object.
The state of the bitmap indicates how much
free space exists in a given data block
(i.e. > 75%, between 50 and 75%, between 25 to
50% or < 25%) as well as whether it is formatted or not.
The new implementation eliminates the necessity to
tune space management related
controls (such as FREELISTS, FREELIST GROUPS and PCTUSED)
thereby freeing database administrators from manually managing the
space within a database object.
At the same time, it improves the space utilization since the
database now has a more accurate knowledge of how
free a data block is.
This enables better reuse of the available free space
especially for objects
with rows of highly varying size.
Additionally, the Automatic Segment Space Management
feature improves the performance of concurrent DML
operations significantly since different parts of
the bitmap can be used simultaneously eliminating
serialization for free space lookups.
[ See ID 180608.1]