Pages
The fundamental unit of data storage in SQL Server is
the page. The disk space allocated to a data file (.mdf or .ndf) in a database
is logically divided into pages numbered contiguously from 0 to n.
Extents are a collection of eight physically contiguous
pages and are used to efficiently manage the pages. All pages are stored in
extents. In SQL Server, the page size is 8 KB. Each page begins with a 96-byte
header that is used to store system information about the page. This
information includes the page number, page type, the amount of free space on
the page, and the allocation unit ID of the object that owns the page.
Data rows are
put on the page serially, starting immediately after the header. A row offset
table starts at the end of the page, and each row offset table contains one
entry for each row on the page. Each entry records how far the first byte of
the row is from the start of the page. The entries in the row offset table are
in reverse sequence from the sequence of the rows on the page.
The maximum amount of data and overhead that is
contained in a single row on a page is 8,060 bytes (8 KB).
Extents
Extents are the basic unit in which space is managed. An extent is
eight physically contiguous pages, or 64 KB. This means SQL Server databases
have 16 extents per megabyte. SQL Server has two types of extents:
· Uniform extents are owned by a single object; all eight pages in
the extent can only be used by the owning object.
· Mixed extents are shared by up to eight objects. Each of the
eight pages in the extent can be owned by a different object.
A new table or index is generally allocated pages from mixed
extents. When the table or index grows to the point that it has eight pages, it
then switches to use uniform extents for subsequent allocations. If you create
an index on an existing table that has enough rows to generate eight pages in
the index, all allocations to the index are in uniform extents.
· Global Allocation Map (GAM) GAM pages record
what extents have been allocated. Each GAM covers 64,000 extents, or almost 4
GB of data. The GAM has one bit for each extent in the interval it covers. If
the bit is 1, the extent is free; if the bit is 0, the extent is allocated.
· Shared Global Allocation Map (SGAM) SGAM pages
record which extents are currently being used as mixed extents and also have at
least one unused page. Each SGAM covers 64,000 extents, or almost 4 GB of data.
The SGAM has one bit for each extent in the interval it covers. If the bit is
1, the extent is being used as a mixed extent and has a free page. If the bit
is 0, the extent is not used as a mixed extent, or it is a mixed extent and all
its pages are being used.
Each extent has the following bit patterns set in the GAM and
SGAM, based on its current use.
Each
extent has the following bit patterns set in the GAM and SGAM, based on its
current use. Current use of extent
|
GAM
bit setting
|
SGAM
bit setting
|
Free,
not being used
|
1
|
0
|
Uniform
extent, or full mixed extent
|
0
|
0
|
Mixed
extent with free pages
|
0
|
1
|
Tracking Free Space
Page
Free Space (PFS) pages record the allocation status of each page, whether an
individual page has been allocated, and the amount of free space on each page.
The PFS has one byte for each page, recording whether the page is allocated,
and if so, whether it is empty, 1 to 50 percent full, 51 to 80 percent full, 81
to 95 percent full, or 96 to 100 percent full.
No comments:
Post a Comment