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