數據頁是包含已添加到資料庫表中的用戶數據的結構。 如前所述, 數據頁有三種, 每個都以不同的格式存儲數據。 SQL server 有行內數據頁、行溢出數據頁和 LOB 數據頁。 與 SQL server 中的所有其他類型的頁一樣, 數據頁的大小固定為 8 KB 或8192位元組。 它們由三主要組件組成 ...
數據頁是包含已添加到資料庫表中的用戶數據的結構。
如前所述, 數據頁有三種, 每個都以不同的格式存儲數據。
SQL server 有行內數據頁、行溢出數據頁和 LOB 數據頁。
與 SQL server 中的所有其他類型的頁一樣, 數據頁的大小固定為 8 KB 或8192位元組。
它們由三主要組件組成: 頁面頁眉、數據行和行偏移量數組, 如圖6-4 所示。
頁標題
如圖6-4 所示, 頁標題占據每個數據頁的前96個位元組 (為數據、行開銷和行偏移保留8096個位元組)。表6-5 列出了檢查頁標題時顯示的一些信息。
行內數據的數據行
頁標題後面是存儲表實際數據行的區域。單個數據行的最大大小為8060位元組的行內數據。
行還可以在單獨的頁上存儲行溢出和 LOB 數據。
在給定頁上存儲的行數根據表結構和存儲的數據而變化。
具有所有固定長度列的表始終可以存儲每頁相同的行數;
可變長度行可以根據輸入數據的實際長度, 存儲儘可能多的行。
保持行長更短可以使更多行適合頁面, 從而減少 i/o 並增加所需數據在緩存中的可能。
行偏移量數組
行偏移量數組是2位元組項的塊, 每個條目表示相應數據行開始的頁面上的偏移量。
每行在這個數組中都有一個2位元組的條目 (正如前面所討論的, 當您閱讀每行所需的10個開銷位元組時)。
雖然這些位元組沒有存儲在數據行中, 但它們確實會影響適合頁面的行數。
行偏移量數組指示頁上行的邏輯順序。
例如, 如果表具有聚集索引, SQL server 將按聚集索引鍵的順序存儲這些行。
這並不意味著行按聚集索引鍵的順序物理地存儲在頁面上。
相反, 偏移量數組中的插槽0引用聚集索引鍵順序中的第一行, 插槽1引用第二行, 依此類推。
正如您在檢查實際頁面時所看到的那樣, 這些行的物理位置可以位於頁面的任何位置。
查看數據頁
可以使用 DBCC 頁命令查看數據頁的內容,
這允許您查看資料庫中任何給定頁的頁標題、數據行和行偏移表。
只有系統管理員才能使用 DBCC 頁。
但是, 由於通常不需要查看數據頁的內容, 因此在 SQL server 文檔中找不到有關 DBCC 頁的信息。
不過, 如果您想使用它, 下麵是語法:
DBCC PAGE ({dbid | dbname}, filenum, pagenum[, printopt])
DBCC 頁面命令包含表6-6 中顯示的參數。
清單6-4 中的代碼和結果顯示來自 DBCC 頁的示例輸出, 其 printopt 值為1。
請註意, DBCC TRACEON (3604) 指示 SQL server 將結果返回給客戶端。
如果沒有此 traceflag, 則不會為 DBCC 頁命令返回輸出。
正如所看到的, DBCC 頁的輸出分為四主要部分: 緩衝區、頁標題、數據和偏移量表 (實際上是偏移量數組)。
緩衝區部分顯示有關給定頁的緩衝區的信息。
此上下文中的緩衝區是管理頁的記憶體結構, 本節中的信息僅在頁處於記憶體中時才相關。
從 DBCC 頁的 "輸出" 頁標題部分顯示頁上所有標題欄位的數據。
(表6-5 顯示了大多數這些欄位的含義。數據節包含每行的信息。
使用具有 printopt 值1或3的 DBCC 頁表示插槽位置, 即每行的6個表存儲257、頁上的行的偏移量和行的長度。
行數據分為三部分。
左列指示顯示數據所在行內的位元組位置。
中間部分包含存儲在頁面上的實際數據, 每五列顯示八個十六進位數字。
最右邊的列包含數據的 ASCII 字元表示形式。 此列中只有字元數據是可讀的, 儘管可能會顯示某些其他數據。
"偏移量表" 部分顯示頁面末尾的行偏移量數組的內容。
在 DBCC 頁的輸出中, 您可以看到此頁包含23行, 第一行 (由插槽0指示) 從偏移量 1585 (0x631) 開始。
實際存儲在頁面上的第一行實際上是6行, 而行偏移量數組中的偏移量為96。printopt 值為1的 DBCC 頁顯示 "插槽編號" 順序中的行, 即使可以從每個插槽的偏移量中看到, 也不是在頁面上實際存在行的順序。
如果使用 printopt 值為2的 DBCC 頁, 則會看到頁的所有8096個位元組 (標頭之後) 的轉儲, 按它們存儲在頁面上的順序排列。