<address id="thnfp"></address>

    <address id="thnfp"><th id="thnfp"><progress id="thnfp"></progress></th></address>
    <listing id="thnfp"><nobr id="thnfp"><meter id="thnfp"></meter></nobr></listing>
    以文本方式查看主題

    -  安易免費財務軟件交流論壇  (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命令輸出結果的字段描述:

    字段名稱字段描述
    PageFID索引文件的ID
    PageFID索引文件的ID
    IAMFID管理該分頁的IAM分頁所在的文件ID
    IAMFID管理該分頁的IAM分頁的ID
    ObjectID對象ID
    IndexID索引ID,0 代表堆, 1 代表聚集索引, 2-250 代表非聚集索引
    PartitionNumber表或索引所在的分區號碼
    PartitionID包含該分頁的分區ID
    iam_chain_type該頁所屬分配單元類型;行內數據、行溢出數據或Lob數據
    PageType分頁類型:1數據頁面;2索引頁面;3Lob_mixed_page;4Lob_tree_page;10IAM頁面
    IndexLevel索引層級,0 代表葉級別分頁 ;>0 代表非葉級別層次; NULL 代表IAM分頁
    NextPageFID本層下一個分頁所在的文件ID
    NextPageFID本層下一個分頁ID
    PrevPageFID本層上一個分頁所在的文件ID
    PrevPageFID本層上一個分頁ID

       繼續為了簡化的目的,同時因為模擬的是小型數據表,所以可以忽略相關文件號和iam鏈類型、分區號(該表暫無行內遷移和lob字段),我們只需要看看各 個數據頁之間是否有相互聯系、各個頁面的類型即可;所以我們構建了一張數據表用以存放dbcc ind命令輸出的結果,并有選擇性的選擇我們想要的字段。

    CREATE TABLE tablepage
    (
      PageFID         TINYINT,
      PagePID        
    INT,  
      IAMFID          TINYINT,
      IAMPID          
    INT,
      ObjectID        
    INT,
      IndexID         TINYINT,
      PartitionNumber TINYINT,
      PartitionID     BIGINT,
      iam_chain_type  VARCHAR(
    30),    
      PageType        TINYINT,
      IndexLevel      TINYINT,
      NextPageFID     TINYINT,
      NextPagePID    
    INT,
      PrevPageFID     TINYINT,
      PrevPagePID    
    INT
    );
    GO

    TRUNCATE TABLE tablepage;
    INSERT INTO tablepage EXEC (
    \'DBCC IND(testdb,testheap,1)\');
    SELECT
      PagePID,IAMPID,ObjectID,IndexID,Pagetype,IndexLevel,
      NextPagePID,PrevPagePID
      FROM 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管理頁面之外,相互之間是缺乏聯系的!


    Channel