程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2008存儲結構之PFS結構

SQL Server 2008存儲結構之PFS結構

編輯:關於SqlServer
PFS(Page Free Space),也叫頁面自由空間,該頁面用來跟蹤一個文件中每一個特定的頁面的利用率情況。一個文件中第二個頁面(頁碼1)就是PFS頁面,該頁面的每個字節都記錄了相應頁面的分配情況、頁面類型、是否IAM頁、是否包含刪除記錄、以及空間利用率信息;PFS能夠管理和跟蹤8088個頁面的使用情況,即接近64M的空間,以後每8088個頁面將再出現一次。

  讓我們首先了解一下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`        
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操作如何尋找合適的分區和頁面對數據進行處理還是留待後續介紹吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved