2009年3月24日 星期二

Page and Extent In SQL Server

在SQL Server 裡,最基本的儲存單位為 page。當一個新 Table 被建立時,就會在硬碟裡建立一塊以 8K 的連續空間,以便儲存我們想要保留的資料。這 8K 的連續空間,正是 SQL Server 的基本儲存單位: Page。當這 8K 的空間用完時,又會自動再產生一個 8K 的新 page。

如右圖所示,每個 page 最前面會先放一個 96 byte 的 Page header,在 Page header 裡頭紀錄了 page number, page type, page 剩餘空間, 以及配置單位編號。

page number 的分配是由 0 - 7,因為每 8 個 page 在 SQL Server 裡就會被視為一個 Extent。

page type 則是定義了以下格式:Data, Index, Text/Image, Global Allocation Map, Shared Global 
Allocation Map,Page Free Space, Index Allocation Map, Bulk Changed Map, Differential Changed Map。

Data row 則是緊接在 Page header 的後面。而放在最後面的則 Row offsets。Row offsets 它擺放的順序是從頁尾開始,主要是記載著每個 Data row 它離頁首的距離。

雖然 page 是最基本的儲存單位,但 SQL Server 為了在空間管理上更有效率,它將 8 個連續的 page 空間 ( 64 K) 視為一個 Extent。但如果你的資料量很小,則 SQL Server 就不會主動幫你建立一個 Extent。

Extent 因裡面 8 個 page 的型態,而有 Uniform extents 與 Mixed extents。簡言之,如果你的 8 個 page 都是同一個型態,則稱為  Uniform extents ,反之則為  Mixed extents。

以上圖為例, Mixed extent 裡頭 同時包含了 table2, table3, index1, index2, index3 等等的混何型態,所以稱為 Mixed extent。而 Uniform extent 裡面的 8 個 page 則都是 table1。





文獻參考:

沒有留言:

張貼留言