This article is half-done without your Comment! *** Please share your thoughts via Comment ***
In the previous article, I shared information about the SQL Server Extent which is storing eight data pages.
The SQL Server manages two important pages to store information about occupied and free space of 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 an 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:
1 2 3 4 5 6 7 |
/* FileID: 1 PageID: 296 */ DBCC TRACEON(3604) GO DBCC PAGE('database_name',1,296,3) |