數據頁是包含已添加到數據庫表中的用戶數據的結構。數據庫
如前所述, 數據頁有三種, 每一個都以不一樣的格式存儲數據。數組
SQL server 有行內數據頁、行溢出數據頁和 LOB 數據頁。緩存
與 SQL server 中的全部其餘類型的頁同樣, 數據頁的大小固定爲 8 KB 或8192字節。ide
它們由三主要組件組成: 頁面頁眉、數據行和行偏移量數組, 如圖6-4 所示。server
頁標題blog
如圖6-4 所示, 頁標題佔據每一個數據頁的前96個字節 (爲數據、行開銷和行偏移保留8096個字節)。表6-5 列出了檢查頁標題時顯示的一些信息。索引
行內數據的數據行內存
頁標題後面是存儲表實際數據行的區域。單個數據行的最大大小爲8060字節的行內數據。文檔
行還能夠在單獨的頁上存儲行溢出和 LOB 數據。it
在給定頁上存儲的行數根據表結構和存儲的數據而變化。
具備全部固定長度列的表始終能夠存儲每頁相同的行數;
可變長度行能夠根據輸入數據的實際長度, 存儲儘量多的行。
保持行長更短可使更多行適合頁面, 從而減小 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個表存儲25七、頁上的行的偏移量和行的長度。
行數據分爲三部分。
左列指示顯示數據所在行內的字節位置。
中間部分包含存儲在頁面上的實際數據, 每五列顯示八個十六進制數字。
最右邊的列包含數據的 ASCII 字符表示形式。 此列中只有字符數據是可讀的, 儘管可能會顯示某些其餘數據。
"偏移量表" 部分顯示頁面末尾的行偏移量數組的內容。
在 DBCC 頁的輸出中, 您能夠看到此頁包含23行, 第一行 (由插槽0指示) 從偏移量 1585 (0x631) 開始。
實際存儲在頁面上的第一行其實是6行, 而行偏移量數組中的偏移量爲96。printopt 值爲1的 DBCC 頁顯示 "插槽編號" 順序中的行, 即便能夠從每一個插槽的偏移量中看到, 也不是在頁面上實際存在行的順序。
若是使用 printopt 值爲2的 DBCC 頁, 則會看到頁的全部8096個字節 (標頭以後) 的轉儲, 按它們存儲在頁面上的順序排列。