Index internal 結構 試驗一

oracle_kai發表於2008-03-26

Index internal 結構 試驗一

本文通過dump index root 塊,branch 塊和leaf 塊,及相對應的table中的內容,來初步揭示index 的一些內部結構資訊,dump出來的檔案作了概要的說明,供學習參考使用。

實驗環境:windows xp,oracle 9i

SQL> drop table t;

SQL> create table t as select rownum t,a.* from dba_objects a;

SQL> create index t_idx on t(t);

SQL> select extent_id,file_id,block_id,blocks from dba_extents where segment_name='T_IDX' AND WNER='SYS';

 EXTENT_ID    FILE_ID   BLOCK_ID     BLOCKS

---------- ---------- ---------- ----------

         0          1      52153          8

         1          1      52161          8

         2          1      52177          8

         3          1      52185          8

         4          1      52193          8

         5          1      52201          8

         6          1      52209          8

         7          1      52217          8

         8          1      52225          8

SQL> ANALYZE INDEX T_IDX VALIDATE STRUCTURE;

SQL> SELECT height,blocks,lf_blks,br_blks,btree_space,used_space FROM INDEX_STATS WHERE NAME='T_IDX';

    HEIGHT     BLOCKS    LF_BLKS    BR_BLKS BTREE_SPACE USED_SPACE

---------- ---------- ---------- ---------- ----------- ----------

         2         72         65          1      528032     465248

可以看到,該所引高度為2,只有1branch塊,同時也是root根節點,同時有65leaf塊。

Block 52153 表示 索引段頭塊,對於此處分析無大用途,再次省略

Block 52154 表示該索引的root 所在的塊,dump該塊,可以看到,branch 塊中存在中指向下級葉塊(有可能是葉塊,也可能是分支塊)的地址指標及葉塊中的最小值,dump該塊。

 

alter system dump datafile 1 block 52154;

…………………………………………….

seg/obj: 0x7800  csc: 0x00.5a071b  itc: 1  flg: -  typ: 2 - INDEX

     fsl: 0  fnx: 0x0 ver: 0x01

  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0xffff.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.005a071b

Branch block dump  --表示該塊ranch block

=================

header address 79040580=0x4b61044

kdxcolev 1

KDXCOLEV Flags = - - -

kdxcolok 0

kdxcoopc 0x80: pcode=0: iot flags=--- is converted=Y

kdxconco 2

kdxcosdc 0

kdxconro 64 –該塊含有64個rows,即root根節點有64個指向葉塊的指標

kdxcofbo 156=0x9c

kdxcofeo 7440=0x1d10

kdxcoavs 7284

kdxbrlmc 4246459=0x40cbbb  --第一個葉塊地址前2位補0,即0000 0000 0100 0000 1100 1011 1011 1011, file 1 block 52155,為第一個index leaf 的塊地址

kdxbrsno 0

kdxbrbksz 8060

row#0[8051] dba: 4246460=0x40cbbc第二個索引葉塊地址

col 0; len 3; (3):  c2 05 57  -- c2 05 57 表示 486,即第二個葉塊中的記錄從t=486 開始

col 1; TERM

row#1[8042] dba: 4246461=0x40cbbd

col 0; len 3; (3):  c2 0a 42

col 1; TERM

…………………………………………. 省略瞭如果類似記錄

………………………………………….

row#63[7440] dba: 4246531=0x40cc03 –root 塊共有64條 記錄,每條記錄都有指向下一級塊的指標

col 0; len 4; (4):  c3 03 5e 46

col 1; TERM

----- end of branch block dump -----

End dump data blocks tsn: 0 file#: 1 minblk 52154 maxblk 52154

 

轉儲 52155 塊,看看該索引葉塊的儲存內容

SQL> alter system dump datafile 1 block 52155;

…………………………………..

kdxconco 2

kdxcosdc 0

kdxconro 485  --該索引葉塊所儲存的記錄數

kdxcofbo 1006=0x3ee

kdxcofeo 1834=0x72a

kdxcoavs 828

kdxlespl 0

kdxlende 0

kdxlenxt 4246460=0x40cbbc 下一個葉塊地址

kdxleprv 0=0x0           --上一個葉塊地址,該塊為第一個塊,所以為0,可以驗證:索引用雙向連結串列來管理所有的葉塊,這樣就可以提高index range scan

kdxledsz 0

kdxlebksz 8036

row#0[8024] flag: -----, lock: 0

col 0; len 2; (2):  c1 02  --c1 02 表示數值型的 1,即t=1 的第一條記錄

col 1; len 6; (6):  00 40 c9 3a 00 00   -- 0000 0000 0100 0000 1100 1001 0011 1010 file 1 block 51514  索引鍵值所在table的地址 00 00 表示第一條記錄

row#1[8012] flag: -----, lock: 0

col 0; len 2; (2):  c1 03

col 1; len 6; (6):  00 40 c9 3a 00 01

………………………………………省略了row#2至row#483 記錄資訊

row#484[1834] flag: -----, lock: 0

col 0; len 3; (3):  c2 05 56  -- c2 05 56 表示t= 485

col 1; len 6; (6):  00 40 c9 41 00 0d

----- end of leaf block dump -----

End dump data blocks tsn: 0 file#: 1 minblk 52155 maxblk 52155

 

SQL> alter system dump datafile 1 block 51514;

Dump 對應table 的所在塊 ,擷取dump出來的第一條記錄,驗證索引葉塊中的索引條目中的確有指向對應table 塊的地址.

…………………….

block_row_dump:

tab 0, row 0, @0x1f25

tl: 99 fb: --H-FL-- lb: 0x0  cc: 14

col  0: [ 2]  c1 02 -- 01

col  1: [ 3]  53 59 53 – 表示sys

col  2: [22]

 2f 31 30 30 35 62 64 33 30 5f 4c 6e 6b 64 43 6f 6e 73 74 61 6e 74

col  3: *NULL*

col  4: [ 4]  c3 02 49 57

col  5: *NULL*

col  6: [10]  4a 41 56 41 20 43 4c 41 53 53

col  7: [ 7]  78 66 05 0c 11 34 1a

col  8: [ 7]  78 66 05 0c 11 34 1a

col  9: [19]  32 30 30 32 2d 30 35 2d 31 32 3a 31 36 3a 35 31 3a 32 35

col 10: [ 5]  56 41 4c 49 44

col 11: [ 1]  4e

col 12: [ 1]  4e

col 13: [ 1]  4e

……………………………………………以下dump內容省略

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10159839/viewspace-217985/,如需轉載,請註明出處,否則將追究法律責任。

相關文章