SQL Server 2008儲存結構之PFS結構

bq_wang發表於2010-11-01
PFS(Page Free Space),也叫頁面自由空間,該頁面用來跟蹤一個檔案中每一個特定的頁面的利用率情況。一個檔案中第二個頁面(頁碼1)就是PFS頁面,該頁面的每個 位元組都記錄了相應頁面的分配情況、頁面型別、是否IAM頁、是否包含刪除記錄、以及空間利用率資訊;PFS能夠管理和跟蹤8088個頁面的使用情況,即接 近64M的空間,以後每8088個頁面將再出現一次。

  讓我們首先了解一下PFS的頁面管理位元組的構造,管理單位為位元組,每位元組管理一個頁面。

01234567
 頁面是否分配是否混合頁面是否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%。

#div_code img { border: 0px none; }
4F09C060:   00009c1f 44444444 00004444 60647060 †....DDDD..DD`dp`        
4F09C070:  
74706070 60606060 60707060 40404040 †tp`p`````pp`@@@@        
4F09C080:  
40404040 61706070 60606070 60306060 †@@@@ap`p```p`0``        
4F09C090:  
60217024 60706060 60606060 40203020 †`!p$`p``````@ 0          
4F09C0A0:  
20202820 60606060 60606070 60606060 †  ( ```````p````        
4F09C0B0:  
70203020 30706070 70607060 70203060 †p 0 0p`pp`p`p 0`        
4F09C0C0:  
70203068 70607060 70607060 70607060 †p 0hp`p`p`p`p`p`        
4F09C0D0:  
70203060 60602020 60702030 20306070 †p 0```  `p 0 0`p        
4F09C0E0:  
60702830 60707070 60606070 60706070 †`p(0`ppp```p`p`p        
4F09C0F0:  
60706070 40404020 20202020 60706070 †`p`p@@@     `p`p        
4F09C100:  
60706060 64616070 60706070 60706070 †`p``da`p`p`p`p`p        
4F09C110:  
60700000 00000000 00000000 00000000 †`p..............        
4F09C120:  
00000000 00000000 00000000 00000000 †................          
4F09DFF0:  
00000000 00000000 00000000 00006000 †..............`.        

 

  最後讓我們用Internals Viewer外掛看一下PFS頁的全貌吧。

1
 

  第七個頁面(頁碼6)被稱為差異變更(Differential Changed Map,DCM)頁面。它跟蹤一個檔案中的哪一個區在最新一次完全資料庫備份以後被修改過。SQL Server用在增量備份時只對已發生資料變更的分割槽進行增量備份即可。

   第八個頁面(頁碼7)被稱為批次更改對映(Bulk Changed Map,BCM)頁面,該頁面當檔案中的一個區在最小量或批次記日誌操作中被使用時用到。就像GAM和SGAM頁面,DCM和BCM頁面針對它們代表的文 件區間中每一個區都有一個位元位相對應。這些頁面的常規間距為511 230個頁面。

  此外關於資料庫在進行DML操作如何尋找合適的分割槽和頁面對資料進行處理還是留待後續介紹吧。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-677128/,如需轉載,請註明出處,否則將追究法律責任。

相關文章