Page chain fragmentation

Adaptive Server page allocation mechanism strives to keep pages that belong to the same object close to each other in physical storage by allocating new pages on an extent already allocated to the object and by allocating new extents on allocation units already used by the object.

However, as pages are allocated and deallocated, page chains on data-only-locked tables can develop kinks. Figure 6-1 shows an example of a kinked page chain between extents in two allocation units.

Figure 6-1: A kink in a page chain crossing allocation units

Image shows a series of page chains which include pages used by , OAM pages, Allocation pages, and other pages. The scan in this image moves from page 10, down to pages 265 and 266, then up again to page 11.

In Figure 6-1, when a scan first needs to access a page from allocation unit 0, it checks the allocation page and issues asynchronous I/Os for all the pages used by the object it is scanning, up to the limit set on the pool. As the pages become available in cache, the query processes them in order by following the page chain. When the scan reaches page 10, the next page in the page chain, page 273, belongs to allocation unit 256.

When page 273 is needed, allocation page 256 is checked, and asynchronous prefetch requests are issued for all the pages in that allocation unit that belong to the object.

When the page chain points back to a page in allocation unit 0, there are two possibilities: