管理由物件所使用的空間

索引配置對應 (IAM) 頁面會對應配置單位所使用資料庫檔案 4 GB 部分中的範圍。配置單位為下列三種類型中的一種:

  • IN_ROW_DATA

    保存堆積或索引的資料分割。

  • LOB_DATA

    保存大型物件 (LOB) 資料類型,例如 xml、varbinary(max) 和 varchar(max)。

  • ROW_OVERFLOW_DATA

    保存 varchar、nvarchar、varbinary 或 sql_variant 資料行中,超過 8,060 個位元組資料列大小限制的可變長度資料。

堆積或索引的每個資料分割都會至少包含一個 IN_ROW_DATA 配置單位。視堆積或索引結構描述而定,資料分割也可能會包含 LOB_DATA 或 ROW_OVERFLOW_DATA 配置單位。如需有關配置單位的詳細資訊,請參閱<資料表與索引組織>。

IAM 頁面涵蓋檔案中的 4 GB 範圍,和 GAM 和 SGAM 頁面的涵蓋範圍相同。如果配置單位包含一個以上檔案的範圍,或超過一個 4 GB 範圍的檔案,IAM 鏈結中就會連結多個 IAM 頁面。因此,每個配置單位在它擁有範圍的每個檔案上都會至少擁有一個 IAM。如果配置給配置單位的檔案範圍超過一個 IAM 頁面所能記錄的範圍,該檔案也會有不止一個 IAM。

管理範圍的索引配置對應 (IAM) 頁面

IAM 頁面是視需要配置給每個配置單位,而且在檔案中的位置是隨機的。系統檢視 sys.system_internals_allocation_units 會指向配置單位的第一個 IAM 頁面。該配置單位的所有 IAM 頁面都會連成一條鏈結。

重要事項重要事項

sys.system_internals_allocation_units 系統檢視僅用於內部用途,且往後可能變更。我們無法確保其相容性。

在每個配置單位鏈結中連結的 IAM 頁面

IAM 頁面擁有一個標頭,指出 IAM 頁面所對應範圍之範疇中的開始範圍。IAM 頁面也擁有一個大型點陣圖,它裡面的每個位元都代表一個範圍。對應中的第一個位元代表了範疇中的第一個範圍,第二個位元代表了第二個範圍,其餘依此類推。若位元為 0,表示它所代表的範圍並未配置給擁有該 IAM 的配置單位。若位元為 1,表示它所代表的範圍已配置給擁有該 IAM 頁面的配置單位。

當 SQL Server Database Engine 必須插入新的資料列,但目前的頁面中沒有可用空間時,就會使用 IAM 與 PFS 頁面來尋找可配置的頁面,或針對堆積或文字/影像頁面,尋找擁有足夠空間可以保存資料列的頁面。Database Engine 將使用 IAM 頁面來尋找配置給該配置單位的範圍。對於每個範圍而言,Database Engine 會搜尋 PFS 頁面,查看是否有可用的頁面。每個 IAM 與 PFS 頁面都涵蓋許多資料頁,因此資料庫的 IAM 與 PFS 頁面個數很少。這代表 IAM 與 PFS 頁面通常位於 SQL Server 緩衝集區的記憶體中,因此可以快速地被搜尋到。對於索引而言,新資料列的插入點是由索引鍵設定。在此情況下,前述的搜尋程序並不會發生。

Database Engine 只在它無法在現有的範圍中找到一個擁有足夠空間來保存插入之資料列的頁面時,才會配置新的範圍給配置單位。Database Engine 將使用比例式配置演算法,從檔案群組中的可用範圍來配置範圍。若檔案群組擁有兩個檔案,其中一個檔案的可用空間是另一個檔案的兩倍,系統將從擁有可用空間的檔案中配置兩個頁面,而從另一個檔案中配置一個頁面。這代表檔案群組中的每個檔案都擁有類似的空間使用百分比。