數據庫頁得概念和大小

SQL Server 中數據存儲的基本單位是頁。爲數據庫中的數據文件(.mdf 或 .ndf)分配的磁盤空間能夠從邏輯上劃分紅頁(從 0 到 n連續編號)。磁盤 I/O 操做在頁級執行。也就是說,SQL Server 讀取或寫入全部數據頁。sql

區是八個物理上連續的頁的集合,用來有效地管理頁。全部頁都存儲在區中。數據庫

 


在 SQL Server 中,頁的大小爲 8 KB。這意味着 SQL Server 數據庫中每 MB 有 128 頁。每頁的開頭是 96 字節的標頭,用於存儲有關頁的系統信息。此信息包括頁碼、頁類型、頁的可用空間以及擁有該頁的對象的分配單元 ID。大數據

下表說明了 SQL Server 數據庫的數據文件中所使用的頁類型。spa

頁類型指針

內容日誌

Dataxml

text in row 設置爲 ON 時,包含除 text、ntext、image、nvarchar(max)、varchar(max)、varbinary(max) 和 xml 數據以外的全部數據的數據行。對象

Index索引

索引條目。get

Text/Image

大型對象數據類型:

  • text、 ntext、image、nvarchar(max)、varchar(max)、varbinary(max) 和xml 數據。

數據行超過 8 KB 時爲可變長度數據類型列:

  • varchar、nvarchar、varbinary 和 sql_variant

Global Allocation Map、Shared Global Allocation Map

有關區是否分配的信息。

Page Free Space

有關頁分配和頁的可用空間的信息。

Index Allocation Map

有關每一個分配單元中表或索引所使用的區的信息。

Bulk Changed Map

有關每一個分配單元中自最後一條 BACKUP LOG 語句以後的大容量操做所修改的區的信息。

Differential Changed Map

有關每一個分配單元中自最後一條 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 會動態將列移回到原始數據頁。


區是管理空間的基本單位。一個區是八個物理上連續的頁(即 64 KB)。這意味着 SQL Server 數據庫中每 MB 有 16 個區。

爲了使空間分配更有效,SQL Server 不會將全部區分配給包含少許數據的表。SQL Server 有兩種類型的區:

  • 統一區,由單個對象全部。區中的全部 8 頁只能由所屬對象使用。

  • 混合區,最多可由八個對象共享。區中八頁的每頁可由不一樣的對象全部。

一般從混合區向新表或索引分配頁。當表或索引增加到 8 頁時,將變成使用統一區進行後續分配。若是對現有表建立索引,而且該表包含的行足以在索引中生成 8 頁,則對該索引的全部分配都使用統一區進行。

混合區和統一區

相關文章
相關標籤/搜索