揭開MSSQL---extents內部的神秘面紗

sqysl發表於2016-06-10

一、MSSQLextent分兩種:

1.         Mixed extent:每個表或索引建立時,MSSQL並不給它分配一個extent,而是在mixed extnet內分配一個頁,空間需求擴大時,再分配一個…,直到表或索引的空間需求超過8個頁,系統為它分配一個extent,這個extent就是uniform. extent;

2.         Uniform. extent:當表或索引的空間需求超過8個頁時,系統就為它分配一個uniform. extent;

二、MSSQL用幾種頁來記錄extent的使用:

1.         GAM:global allocation map,用來記錄extent是否已經被使用,每個位記錄一個extent,0為已用,1表示未用,一個頁大約有8000位元組、64000個位,每個GAM頁可以記錄64000個extent,每個extent為8*8k=64k,那麼GAM頁最終可以記錄64k*64000大小的空間,即大約4G的空間,也就是說GAM只能記錄4G大小的空間,超過4G必須另外分配GAM,第一和第二個GAM間隔511230個頁,第一個GAM總是檔案的第三個頁(page 2);

2.         SGAM:shared global allocation map,用來記錄extent是否被用作mixed extent,每個位記錄一個extent,如果為1,說明對應的extent用作mixed extent且其中還有可用的頁,為0,說明其為uniform. extent或mixed extent但已沒可用頁。同樣,一個SGAM可以記錄4G的空間,超過這個大小就需要另外分配SGAM,第一個和第二個SGAM間隔511230個頁,第一個SGAM總是檔案的第四個頁(page 3);

3.         另外一種頁——IAM,index allocation map,用來記錄每個物件在一個檔案中extents的情況,也就是記錄物件被分配了一個檔案中的extents,IAM頁頭有八個槽,分別用來指向表或索引的頭八個頁,因為它們都被分配在mixed extents裡,後面頁頭還有一個map,其中每個位對應一個extent,如果相應檔案中extent的位是1,就說明這個extent屬於該物件,否則,就不屬於該物件;該頁可以在檔案的任何位置分配,它也可以不指向它所在檔案的extents,注意:IAM僅僅對應被一個分配單位使用的檔案中的4G範圍的extents使用情況,對應511230個頁,一旦超過這些頁,系統就要分配另外一個IAM頁,一個物件的各個IAM也都被連結在一起,IAM頭部有指向第一個extent的地址。每個分配單位中,只包含一個表或索引分割槽的一類頁,多個分割槽要用到多個IAM,而同一個分割槽不同類的頁,也要用到不同的IAM頁。

4.         PFS, page free space,用來記錄每個檔案中每個頁如何使用的,檔案的第二個頁為PFS頁,其後第8088個也是PFS頁,因為一個PFS頁中只有8088個位元組可以用來記錄頁的使用情況。

5.         DCM,differential changed map,用來記錄自從上次全備以來改變過的extents,主要用於差異備份需要,檔案的第七個頁(page 6)為DCM頁,也是隻能覆蓋4G的空間,超過4G就要分配另一個DCM頁,中間要間隔511230個頁。

6.         BCM,bulk changed map,用來記錄最小或批次日誌操作改變的extents,檔案的第八個頁為BCM頁,只能覆蓋4G的空間,超過4G就要重新分配BCM頁,中間間隔511230個頁。

7.         至此,可以總結如下:檔案的第一個頁為檔案頭頁,即page 0,第二個頁為PFS頁,第三個頁為GAM頁,第四個頁為SGAM頁,第七個頁為DCM頁,第八個頁為BCM頁,而IAM頁可以在檔案任何位置分配。

 


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

相關文章