索引,高水位!?

[复制链接]
查看11 | 回复7 | 2010-5-13 09:34:23 | 显示全部楼层 |阅读模式
较奇怪的一个问题:
一个表A,在其中一列F1上建一个索引(表空间为INDX,里面没有别的对象了),名为A_F1,建完后,在DBA STUDIO中看到INDX表空间用了50M(表空间大小为180M),然后在DBA_SEGMENTS 中查看到,这个名为A_F1的索引段居然扩展了21次之多,再查它的高水位,几乎接近了整个数据文件的大小!这是怎么回事?而且我看到,DBA_EXTENTS 中在它扩展21个区的过程中,BLOCK_ID的大小并不是按扩展过程不断增大的,好像是随机的,例如在我查看MAX(BLOCK_ID)时,显示的是第4次扩展时获得的BLOCK_ID最大,难道ORACLE在为扩展区查找空闲块时没有规则吗(如从最小的BLOCK_ID查起)。如果要是这样的话,就算我只扩展了两个区,那也有可能将数据文件较末端的位置分给新区,将HWM搞得很高?
后来的解决方法:先是重建索引,再查,还是一样,DROP INDEX再试也一样,于是将INITIAL 和 NEXT 改大使扩展区的次数减小(本例是4次),再查看高水位,这次查看到HWM和实际使用空间差不多了。OK,问题搞定。
但上面的描述中的疑问就始终不解。


回复

使用道具 举报

千问 | 2010-5-13 09:34:23 | 显示全部楼层
你是不是使用的 oracle920 .表空间是 ASSM 类型的
回复

使用道具 举报

千问 | 2010-5-13 09:34:23 | 显示全部楼层
不是。817。
回复

使用道具 举报

千问 | 2010-5-13 09:34:23 | 显示全部楼层
有哪位兄弟可以作个解释?谢过!
回复

使用道具 举报

千问 | 2010-5-13 09:34:23 | 显示全部楼层
这里要确认几个问题
1:该表空间只有一个数据文件
2:该表空间是新建的还是曾经被使用过的
3:该表空间是数据字典表空间还是 本地管理表空间
回复

使用道具 举报

千问 | 2010-5-13 09:34:23 | 显示全部楼层
最初由 biti_rainy 发布
[B]这里要确认几个问题
1:该表空间只有一个数据文件
2:该表空间是新建的还是曾经被使用过的
3:该表空间是数据字典表空间还是 本地管理表空间 [/B]

1、一个数据文件。
2、曾经使用过。(但现在里没有东西了)
3、数据字典管理的。
我想我的疑问就是ORACLE在扩展一个新区的时候用什么样的策略到数据文件中去找合适的块?我观察了DBA_EXTENTS中的扩展记录,发现它是没有太多规律的,例如 第一次扩展区的块号是
1056,第二次是1098,第三次是1123 ,第四次是950,第五次是1000 。看起来先是往后扩展了,后来又回来了。
回复

使用道具 举报

千问 | 2010-5-13 09:34:23 | 显示全部楼层
2、曾经使用过。(但现在里没有东西了)
3、数据字典管理的。

因为分配extent 的时候是从 sys.fet$ 里面搜索的,这样就造成会和你当初空间释放的顺序有关系!
你要明白这个道理首先要明白 DMT 和 LMT 的区别,有什么特性,怎么释放和分配空间
BTW :去研究这个问题,几乎已经不具有什么意义,因为 DMT 已经被抛弃了
回复

使用道具 举报

千问 | 2010-5-13 09:34:23 | 显示全部楼层
最初由 biti_rainy 发布
[B]2、曾经使用过。(但现在里没有东西了)
3、数据字典管理的。

因为分配extent 的时候是从 sys.fet$ 里面搜索的,这样就造成会和你当初空间释放的顺序有关系!
你要明白这个道理首先要明白 DMT 和 LMT 的区别,有什么特性,怎么释放和分配空间
BTW :去研究这个问题,几乎已经不具有什么意义,因为 DMT 已经被抛弃了 [/B]

BITI说的也是,行,再专注一下研究DMT,LMT吧。感谢BITI。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行