| 頁碼 | m_type | 名稱 | 功能 |
|---|---|---|---|
| 0 | 15 | File Header | 檔案屬性、版本、大小、成長設定 |
| 1 | 11 | PFS (Page Free Space) | 每頁配置狀態、可用空間百分比 |
| 2 | 8 | GAM (Global Allocation Map) | 追蹤區塊配置狀態 (0=已配置, 1=自由) |
| 3 | 9 | SGAM (Shared GAM) | 追蹤混合區塊且有自由頁 (1=混合且有自由, 0=其他) |
| 4-5 | 0 | Reserved | 保留 |
| 6 | 16 | DCM (Differential Changed Map) | 追蹤自上次完整備份後變更的區塊 |
| 7 | 17 | BCM (Bulk Changed Map) | 追蹤自上次記錄備份後大量作業變更的區塊 |
| 8 | 13 | Boot Page | 資料庫啟動資訊 (版本、相容層級、復原模式...) |
-- 開啟輸出到用戶端
DBCC TRACEON(3604);
GO
-- 查看 GAM (頁面 2) 選項 3 (含資料列解碼)
DBCC PAGE('TestDB', 1, 2, 3);
GO
-- 查看 SGAM (頁面 3)
DBCC PAGE('TestDB', 1, 3, 3);
GO
-- 以表格輸出 (選項 1 + WITH TABLERESULTS)
DBCC PAGE('TestDB', 1, 2, 1) WITH TABLERESULTS;
DBCC PAGE('TestDB', 1, 3, 1) WITH TABLERESULTS;
第 194-196 bytes (0-based) = `00 00 C0` (hex)。
轉二進位:`1100 0000` → 反轉後 `00 00 11` → 表示前 2 區塊 (0-1) 為自由,其餘已配置。
對應前 128 頁 (16 區塊) 已配置,符合系統物件佔用。
SELECT
file_id, page_id,
CASE page_type
WHEN 1 THEN 'Data'
WHEN 2 THEN 'Index'
WHEN 8 THEN 'GAM'
WHEN 9 THEN 'SGAM'
WHEN 11 THEN 'PFS'
WHEN 13 THEN 'Boot'
WHEN 15 THEN 'FileHeader'
WHEN 16 THEN 'DCM'
WHEN 17 THEN 'BCM'
ELSE 'Other(' + CAST(page_type AS VARCHAR) + ')'
END AS PageType,
page_level, allocation_unit_id
FROM sys.dm_db_database_page_allocations(DB_ID(), NULL, NULL, NULL, 'DETAILED')
WHERE page_type IN (1,2,8,9,11,13,15,16,17)
ORDER BY file_id, page_id;
理解 GAM/SGAM/PFS/IAM 運作機制,有助於:排查配置爭用 (SGAM 熱點)、解讀 `DBCC CHECKDB` 輸出、規劃檔案群組與成長策略、優化大量載入 (最小化記錄配置)。