向大师致敬,向大师学习!!!

Index internal 结构 试验一

上一篇 / 下一篇  2008-03-26 22:11:32 / 个人分类:数据库(oracle)

Index internal结构试验一

本文通过dump indexroot块,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

kdxconco2

kdxcosdc 0

kdxconro64 –该块含有64个rows,即root根节点有64个指向叶块的指针

kdxcofbo 156=0x9c

kdxcofeo 7440=0x1d10

kdxcoavs 7284

kdxbrlmc4246459=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 3a00 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内容省略

 


TAG: index internal 索引内部结构

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar