oracle B*Tree索引的理解 续

1 转储索引块信息解释

1.1 通用索引块头

kdxcolev: index level (0 represents leaf blocks) 索引级别,0表示是叶子块

kdxcolok: denotes whether structural block transaction is occurring标示结构块事块是否发生;

kdxcoopc: internal operation code内部操作码

kdxconco: index column count索引列数量,包括ROWID

kdxcosdc: count of index structural changes involving block块中索引结构改变的数量

kdxconro: number of index entries (does not include kdxbrlmc pointer) 索引条目的数量,不包括kdxbrlmc指针

kdxcofbo: offset to beginning of free space within block块中空闲空间的开始位置

kdxcofeo: offset to the end of free space (ie. first portion of block containing index data) 块中空闲空间的结束位置

kdxcoavs: available space in block (effectively area between the two fields above) 块中的可用空间数量(kdxcofbo-kdxcofeo)

1.2 分支头区域

kdxbrlmc:如果索引值小于第一个值(row#0),则为该索引值所在的块地址;

kdxbrsno:最后更改的索引条目;

kdxbrbksz:可使用的块空间。

1.3 叶块头区域

kdxlespl:块拆分时被清除的未提交数据的字节数;

kdxlende:被删除的条目数;

kdxlenxt:下一个叶块的RBA;

kdxleprv:上一个叶块的RBA;

kdxlebksz:可使用的块空间(默认小于分支的可用空间)。

2 使用treedump

今天一位CSDN的网友告诉我,可以treedump使用更方便的查看索引的结构。基于原来的例子,继续学习一下。

2.1 实验

SQL> select object_id from dba_objects where object_name = 'TI';

OBJECT_ID

----------

53432

SQL> alter session set events 'immediate trace name TREEDUMP level 53432';

Session altered

2.2 查看转储文件

----- begin tree dump

branch: 0x280000c 41943052 (0: nrow: 3, level: 1) 对应块12

leaf: 0x280000d 41943053 (-1: nrow: 6 rrow: 6) 对应块13,6行数据(1,10,2,3,31,41)

leaf: 0x280000f 41943055 (0: nrow: 2 rrow: 2) 对应块15,2行数据(5,6)

leaf: 0x280000e 41943054 (1: nrow: 1 rrow: 1) 对应块14,1行数据(7)

----- end tree dump

nrow:索引条目的数量(包含delete项);

rrow:当前块中的索引条目数量(不包含delete项);

level:分支块等级(分支块为1,叶块为0)。

2.3 分析leaf信息

0280000F的十进制数是41943055。

SQL> select to_number('0280000F', 'XXXXXXXX') DECNUM from dual;

DECNUM

----------

41943055

从leaf后的值得到FILE#,BLOCK#。

SQL> select dbms_utility.data_block_address_file(to_number('0280000F', 'xxxxxxxx')) file#,

2 dbms_utility.data_block_address_block(to_number('0280000F', 'xxxxxxxx')) block#

3 from dual;

FILE# BLOCK#

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

10 15

3 转储branch块,与上面结论比较

branch块:12

leaf块:13,14,15

SQL> alter system dump datafile 10 block 12;

System altered

row#0[8042] dba: 41943055=0x280000f文件号10,块号15

col 0; len 1; (1): 35 此块中的最小的key值5

col 1; TERM

row#1[8049] dba: 41943054=0x280000e文件号10,块号14

col 0; len 1; (1): 37此块中的最小的key值7

col 1; TERM

你可能感兴趣的:(oracle B*Tree索引的理解 续)