了解頁面與範圍

SQL Server 中儲存資料的基本單位是分頁。資料庫中配置給資料檔 (.mdf 或 .ndf) 的磁碟空間會邏輯區分為從 0 連續編號到 n 的分頁。磁碟 I/O 作業在分頁層次上操作。也就是說,SQL Server 會讀取或寫入整個資料頁。

範圍是八個實體連續分頁的集合,用來有效地管理這些分頁。所有的分頁都儲存在範圍中。

Pages

在 SQL Server 中,分頁大小為 8 KB。這意味著 SQL Server 資料庫是每 MB 有 128 個分頁。每個分頁的開頭為 96 個位元組的標頭,用來儲存與分頁有關的系統資訊。此資訊包括頁碼、分頁類型、分頁上可用空間的數量,以及擁有分頁的物件配置單位識別碼。

下表顯示 SQL Server 資料庫資料檔案中使用的分頁類型。

分頁類型

內容

資料

text in row 設為 ON 時,具有所有資料的資料列 (text, ntext、image、nvarchar(max)、varchar(max)、varbinary(max)與 xml 資料除外) 。

現存的索引

索引項目

文字/影像

大型物件資料類型:

  • text、 ntext、image、nvarchar(max)、varchar(max)、varbinary(max) 與 xml 資料

資料列超過 8 KB 時可變長度資料行:

  • varchar、nvarchar、varbinary 與 sql_variant

整體配置對應、共用整體配置對應

有關是否配置範圍的資訊。

分頁可用空間

有關分頁配置和分頁中可用空間的資訊。

索引配置對應

有關每個配置單位資料表或索引所用範圍的資訊。

大量變更對應

有關每個配置單位從上一次 BACKUP LOG 陳述式後被大量作業修改之範圍的資訊。

差異式變更對應

有關每個配置單位追蹤自從上個 BACKUP DATABASE 陳述式之後發生變更的範圍的資訊。

[!附註]

記錄檔並沒有包含分頁,它們包含的是一系列的記錄檔資料錄。

資料列將循序地放置於緊接在前置資料後的分頁中。資料列位移資料表從頁面結尾開始,而且每個資料表分別為分頁上每一列包含一個項目。每個項目記錄資料列的第一個位元組與分頁的開頭有多遠。資料列位移資料表的項目順序與分頁中的資料列順序是相反的。

含資料列位移的 SQL Server 資料頁面

大型資料列支援

資料列無法跨越分頁,不過資料列的部份可能已經移出資料列的分頁,所以資料列實際可能很大。最大資料總量與分頁上單一資料列中包含的負擔為 8,060 個位元組 (8 KB)。但是,這不包括 Text/Image 分頁類型中儲存的資料。此限制對於包含 varchar、nvarchar、varbinary 或 sql_variant 資料行的資料表無效。當資料表中所有固定且可變資料行的資料列總大小超過 8,060 個位元組的限制時,SQL Server 會動態地將一或多個可變長度資料行,移到 ROW_OVERFLOW_DATA 配置單位中的分頁,從寬度最大的資料行開始。只要插入或更新作業使得資料列的總大小超過 8,060 個位元組的限制時,就會執行這個動作。當資料行移至 ROW_OVERFLOW_DATA 配置單位中的分頁時,會保留 IN_ROW_DATA 配置單位中原始頁面上的 24 個位元組指標。若是後續作業縮小了資料列大小,SQL Server 則會動態地將資料行移回原始資料頁。如需詳細資訊,請參閱<超過 8 KB 的資料列溢位資料>。

範圍

範圍即管理空間中的基本單位。一個範圍是 8 個連續實體分頁,也就是 64 KB。這意味著 SQL Server 資料庫是每 MB 有 16 個範圍。

若要使其空間配置更有效率,SQL Server 並不會配置整個範圍給包含少量資料的資料表。SQL Server 有兩種範圍類型:

  • 制式的範圍將由一個物件所擁有;範圍中所有的八個分頁只能被擁有的物件所使用。

  • 混合的範圍最多可被八個物件所共用。範圍中的 8 個分頁都可以由不同的物件所擁有。

新的資料表或索引,將自混合的範圍中配置分頁。當資料表或索引成長至擁有八個分頁之後,接著會為後續配置切換成使用制式的範圍。如果現有資料表有足夠的資料列可在索引中產生八個分頁,若對該資料表建立索引,索引的所有配置都將採用制式的範圍。

混合及統一的範圍