分类: Oracle
2008-04-16 13:32:29
来源:赛迪网 作者:avlue |
更新/重用索引条目
当更新了索引条目后,DUMP如下:
kdxconco 2
kdxcosdc 0
kdxconro 2
kdxcofbo 40=0x28
kdxcofeo 8006=0x1f46
kdxcoavs 7966
kdxlespl 0
kdxlende 1
kdxlenxt 0=0x0
kdxleprv 0=0x0
kdxledsz 0
kdxlebksz 8036
row#0[8021] flag: ---D-, lock: 2 => deleted index entry
col 0; len 5; (5): 42 4f 57 49 45
col 1; len 6; (6): 00 80 05 0a 00 00
row#1[8006] flag: -----, lock: 2
col 0; len 5; (5): 5a 49 47 47 59 => new index entry
col 1; len 6; (6): 00 80 05 0a 00 00
更新后,将包含一个删除的条目,一个新的条目。在随后的插入中,如果新插入的索引条目能够放到被删除的索引条目的位置上,就会直接重用这个条目。根据索引值来决定。
所谓重用,是对row 的重用,而不是对row所在物理存储(或说物理位置)的重用。索引是按照indexed value对row进行排序的。有新的row被插入,首先按照value排序,将他放在合适的row list中,如果他的位置正好原来有个row被删掉了,则重用这个row在row list中的位置。至于物理存储上,则可能根据版本不同会有不同。在10.2中,我做的测试并没有向下开辟空间。
结论:
·到叶块中的任何插入都将移除所有被删除的条目;
·删除的空间在随后的写中被清除;
·删除的空间在延迟块清除中被清除;
·全空块被放在空闲列表,可以重用;
索引统计
·dba_indexes
·dbms_stats
·index_stats
-- analyze index index_name validate structure;
--分析资源,锁;
·v$segment_statistics
statistics_level = typical (or all)
注意事项:
blevel (dba_indexes) vs. height (index_stats)
blocks allocated,但未必使用;
lf_rows_len包含行负载(单列索引12个字节)
pct_used索引结构中当前使用的空间:(used_space/btree_space)*100
绝大多数索引统计包含删除的条目:
non-deleted rows = lf_rows – del_lf_rows
pct_used by non-deleted rows = ((used_space – del_lf_rows_len) / btree_space) * 100 |