讲解Oracle数据库B-tree索引

假如聚簇因子过大,那么重建索引可能会有好处,聚簇因子应该接近块的数量,而非行的数量。
B-tree索引:

·索引会随着时间的增加而变的不平衡;

·删除的索引空间不会被重用;

·随着索引层数的增加,索引将会变得无效并需要重建;

·聚簇因子差,索引需要重建;

·为了提高性能,索引需要经常重建;

索引基础

·一个更新由一个删除和一个插入组成;

·页块由索引条目(row header(2/3B)|length(1B)|indexed data value(nB)|length(1B)|RowID(6B))和相应的rowid组成;

·每个页块包含两个指针分别前面的页块和后面页块;

Treedump

alter session set events ‘immediate trace name treedump level index_object_id’;

----- begin tree dump

branch: 0x424362 4342626 (0: nrow: 2, level: 1)

leaf: 0x424363 4342627 (-1: nrow: 540 rrow: 540)

leaf: 0x424364 4342628 (0: nrow: 461 rrow: 461)

----- end tree dump

以上dump包含的信息如下:

块类型:branch(分支块);leaf(页块);

块地址:0x424362 4342626;

nrow:索引条目的数量;

rrow:当前块中的索引条目数量;

level:分支块等级(页块隐示为0);

Block Dump

alter system dump datafile X block X;

alter system dump datafile X block min X1 block max X2

Start dump data blocks tsn: 0 file#: 1 minblk 148538 maxblk 148538

buffer tsn: 0 rdba: 0x0042443a (1/148538)

scn: 0x0000.00162a95 seq: 0x01 flg: 0x04 tail: 0x2a950601

frmt: 0x02 chkval: 0x8b5c type: 0x06=trans data

Block header dump: 0x0042443a

Object id on Block? Y

seg/obj: 0xd1fe csc: 0x00.162a95 itc: 2 flg: O typ: 2 - INDEX

fsl: 0 fnx: 0x42443b ver: 0x01

Itl Xid Uba Flag Lck Scn/Fsc

0x01 0x0005.02a.00000332 0x008005cb.020e.01 CB-- 0 scn 0x0000.00162a92

0x02 0x0008.011.00000346 0x008002e6.0163.03 C--- 0 scn 0x0000.00162a93

该dump包含的信息如下:

rdba:分支块的相对数据库块地址(文件号/块号);

scn:块最后改变的SCN号;

type:块类型;

seq:块改变的数量;

seg/obj: 16进制对象ID;

typ:段类型;

Itl:相关的事务槽(页块默认为2),包括槽ID,事务ID,撤销块地址,标记,锁信息,和事务SCN;

通过rba确定数据文件号和块号:

select DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(rba),

DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(rba)

from dual;

 

posted @ 2014-03-20 18:04  princessd8251  阅读(588)  评论(0编辑  收藏  举报