ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Index internal 结构 试验一

Index internal 结构 试验一

原创 Linux操作系统 作者:oracle_kai 时间:2008-03-26 22:11:32 0 删除 编辑

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,只有1个branch块,同时也是root根节点,同时有65个leaf块。

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博客 ” ,链接:https://blog.itpub.net/10159839/viewspace-217985/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-20

  • 博文量
    48
  • 访问量
    189578