讓我們首先了解一下PFS的頁面管理字節的構造,管理單位為字節,每字節管理一個頁面。
0 1 2 3 4 5 6 7 頁面是否分配 是否混合頁面 是否IAM頁面 是否幻影頁面 空間利用率第0個bit為保留字節,始終為0
第1個bit表示該頁面是否已分配,我們知道GAM頁用來管理區是否已分配,但一個區包含8個頁面,所以用該bit用來准確定位該區的某個頁面是否已分配出去了。
第2個bit表示該頁面是否混合分區的一個頁面。
第3個bit表示該頁面是否是一個IAM頁面。
第4個bit表示該頁面中是否包含幻影或已刪除記錄,這有助於SQL Server定期清理幻影或已刪除記錄。
第5~7個頁面表示該頁面的空間使用率情況。
• 0:表示該頁面為空
• 1:表示該頁面已使用1~50%
• 2:表示該頁面已使用51~80%
• 3:表示該頁面已使用81~95%
• 4:表示該頁面已使用96~100%
我們可以用dbcc page(testdb,1,1,2)來看一下PFS的頁面結構,BUFFER和PAGE HEADER再次就不做詳述了,PFS關於頁面分配的信息是從第100個字節開始的,最後四個字節為系統保留字節,總計管理8088頁。
其中頭四頁均為44,換算成2進制即0100 0100,即為未分配(大概為保留頁的緣故),且為已分配完成的混合區或統一類型區,非IAM頁,且無幻影記錄,空間利用率96~100%。
4F09C060: 00009c1f 44444444 00004444 60647060 †....DDDD..DD`dp`
最後讓我們用Internals VIEwer插件看一下PFS頁的全貌吧。
第七個頁面(頁碼6)被稱為差異變更(Differential Changed Map,DCM)頁面。它跟蹤一個文件中的哪一個區在最新一次完全數據庫備份以後被修改過。SQL Server用在增量備份時只對已發生數據變更的分區進行增量備份即可。
第八個頁面(頁碼7)被稱為批量更改映射(Bulk Changed Map,BCM)頁面,該頁面當文件中的一個區在最小量或批量記日志操作中被使用時用到。就像GAM和SGAM頁面,DCM和BCM頁面針對它們代表的文件區間中每一個區都有一個比特位相對應。這些頁面的常規間距為511 230個頁面。
此外關於數據庫在進行DML操作如何尋找合適的分區和頁面對數據進行處理還是留待後續介紹吧。