PFS(Page Free Space,頁面自由空間)頁面是 SQL Server 用來追蹤資料庫檔案中每個頁面使用狀況的系統頁面。不同於 GAM/SGAM 以「區」為管理單位,PFS 以頁面為粒度,記錄每頁的配置狀態、類型、是否為 IAM 頁、是否包含鬼影記錄,以及空間使用率。
| 位元位置 | 名稱 | 說明 |
|---|---|---|
| Bit 0 | 保留 | 永遠為 0 |
| Bit 1 | 頁面已配置 | 1=已配置,0=未配置。補充 GAM/SGAM 以區為單位的粒度,精確到頁面層級。 |
| Bit 2 | 混合區頁面 | 1=屬於混合區,0=非混合區(統一區或未配置)。 |
| Bit 3 | IAM 頁面 | 1=該頁為 IAM 頁面。 |
| Bit 4 | 鬼影/刪除記錄 | 1=包含鬼影記錄,供背景執行緒清理。 |
| Bit 5-7 | 空間使用率 | 3 位元編碼: 0=空頁 1=1~50% 2=51~80% 3=81~95% 4=96~100% |
DBCC TRACEON(3604);
DBCC PAGE(TESTDB, 1, 1, 2); -- 檔案 1,第 1 頁(PFS),printopt=2 整體輸出
輸出中,PFS 管理資料從第 100 位元組開始,最後 4 位元組為系統保留,共管理 8,088 頁。前 4 預留頁的位元組值為 0x44(二進位 0100 0100),解讀為:
使用 SQL Internals Viewer 可視化 PFS 頁面,快速掌握數萬頁面的使用率分布,發現碎片化或空間浪費。
PFS 是 SQL Server 頁面層級空間管理的核心,配合 GAM/SGAM 的區層級管理,構建了完整的兩層空間追蹤體系。理解 PFS 位元組結構,有助於診斷頁面碎片、鬼影記錄堆積、混合區使用效率等問題,也是深入掌握儲存引擎行為的關鍵一環。