2 256 1 1 16 7996 0 1 0
索引高度和分配块数量没有变化,但是叶子节点进行了重组。被删除数据节点被整理合并。
3、10046文件分析
从10046事件文件分析的情况看,如下:
=====================
PARSING IN CURSOR #139851695602760 len=29 dep=0 uid=0 oct=11 lid=0 tim=1427182487640740 hv=4054144165 ad='aa2f2710' sqlid='a88sghvsuap55'
alter index idx_t_id coalesce
END OF STMT
PARSE #139851695602760:c=17997,e=56662,p=9,cr=117,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=1427182487640739
根据游标编号,可以定位到检索读取数据过程。
WAIT #139851695602760: nam='db file sequential read' ela= 8 file#=1 block#=91705 blocks=1 obj#=164093 tim=1427182487878712
WAIT #139851695602760: nam='db file sequential read' ela= 6 file#=1 block#=91706 blocks=1 obj#=164093 tim=1427182487878751
WAIT #139851695602760: nam='db file sequential read' ela= 8 file#=1 block#=91707 blocks=1 obj#=164093 tim=1427182487878989
WAIT #139851695602760: nam='db file sequential read' ela= 9 file#=1 block#=91708 blocks=1 obj#=164093 tim=1427182487879576
WAIT #139851695602760: nam='db file sequential read' ela= 9 file#=1 block#=91709 blocks=1 obj#=164093 tim=1427182487879914
(篇幅原因,有省略……)
WAIT #139851695602760: nam='db file sequential read' ela= 7 file#=1 block#=91821 blocks=1 obj#=164093 tim=1427182487929761
大量单块读动作,每次集中在164093编号的对象上。
SQL> select object_name, owner from dba_objects where object_id=164093;
OBJECT_NAM OWNER
---------- ------------------------------
IDX_T_ID SYS
说明:合并操作是针对原有索引数据进行读取,之后合并索引。
4、结论
相对于rebuild,coalesce操作讨论的比较少,伴随着结构的变化,并没有发生存储结构的调整回收。相对于rebuild,coalesce有几个优势:
不需要占用近磁盘存储空间 2 倍的空间
可以在线操作
无需重建索引结构,而是尽快地合并索引叶块,这样可避免系统开销过大