SQL Server: GAM and SGAM Pages to find the Extent Space Information

In the previous article, I have shared information about the SQL Server Extent which is stored eight data pages.

The SQL Server manages two important pages to store information about occupied and free space of the each extent.

GAM: Stands for Global Allocation Map.
SGAM: Stands for Shared Global Allocation Map.

Global Allocation Map (GAM):

GAM has a bit for every extent and it records what extents have been allocated for any use.
It stores information about both Uniform and Mixed extents.

If the bit value is 0, extent is in use and If the bit value is 1, extent is free.
It can hold information about the total 64000 extents and approximately size is 4000 MB.

When a new page needs to be allocated, SQL Server finds available extent into GAM pages. When an extent is de-allocated, the bit for this extent is reset in GAM and it makes a available for future allocations.

Shared Global Allocation Map (SGAM):

SGAM has a bit for every extent and it records what extents are currently being used as mixed extent and have at least one unused page.

If the bit value is 0, either extent is not a mixed extent or it is a mixed extent and all its pages being used.
If the bit value is 1, it is a mixed extent and having an at least one unused page.

It can hold information about the total 64000 extents and approximately size is 4000 MB.

When almost all extents are full and SQL Server unable to find free extent information from the GAM page, it uses the SGAM page to find the information about the free extent.

DBCC PAGE to check Allocation Status:

SQL Server GAM Page

Anvesh Patel

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz