以文本方式查看主題 - 安易免費財務軟件交流論壇 (http://m.gangyx.cn/bbs/index.asp) -- 電腦知識交流 (http://m.gangyx.cn/bbs/list.asp?boardid=11) ---- SQL Server2008存儲結構之堆表、行溢出(二) (http://m.gangyx.cn/bbs/dispbbs.asp?boardid=11&id=32402) |
||||||||||||||||||||||||||||||||
-- 作者:炙天 -- 發布時間:2011/1/13 8:44:46 -- SQL Server2008存儲結構之堆表、行溢出(二) 其次SQL Server還提供了一個更為友好的命令以找到各個類型的頁面分布和它們的所在的文件號和頁號。 DBCC IND({\'dbname\'|dbid},{\'objectname\'|objectID}, {nonclustered indid|1|0|-1|-2}[,partition_number]) {\'dbname\'|dbid}表示數據庫名或者數據庫ID {\'objectname\'|objectID}表示對象名或者對象ID {nonclustered indid|1|0|-1|-2}表示顯示行內數據分頁及指定對象的行內IAM分頁信息 1 :顯示所有分頁的信息,包括IAM分頁,數據分頁,所有存在的LOB分頁和行溢出頁,索引分頁 -1: 顯示所有IAM、數據分頁、及指定對象上全部索引的索引分頁. -2: 顯示指定對象的所有IAM分頁 nonclustered indid:顯示所有的IAM、數據分頁以及一個索引的索引分頁信息。 {partition_number}->可選,為了與中的DBCC IND命令向前兼容.它指定了一個特定分區號,如果不指定,顯示所有分區的信息。 以下是DBCC IND命令輸出結果的字段描述:
繼續為了簡化的目的,同時因為模擬的是小型數據表,所以可以忽略相關文件號和iam鏈類型、分區號(該表暫無行內遷移和lob字段),我們只需要看看各 個數據頁之間是否有相互聯系、各個頁面的類型即可;所以我們構建了一張數據表用以存放dbcc ind命令輸出的結果,并有選擇性的選擇我們想要的字段。 CREATE TABLE tablepage 最終結果如下:
我們可以看到SQL Server為該表所使用的頁面地址,索引ID、頁面類型、索引級別、前后頁的關系等等。 Pagetype=10為IAM頁面,Pagetype=1為數據頁面,即17個數據頁面,1個IAM頁面,與 system_internals_allocation_units輸出結果一致,每一個數據頁面都對應該IAM頁面地址,indexid=0表示為堆 表,indexlevel=null表示為IAM頁面,indexlevel=0表示為葉子節點;而讓我們感到有些失望的是每一個頁面似乎除了有共同的 IAM管理頁面之外,相互之間是缺乏聯系的! |