如何收回索引的空闲空间

zjkk1011 2013-12-31 04:09:47
10号数据文件只有一个段,是一个索引

select e.segment_name ,max(block_id + blocks - 1) HWM
from dba_extents e
where file_id = 10
group by e.segment_name ;

SEGMENT_NAME HWM
--------------------- ----------
ASC_MSG_PARA_MID_IDX 16498704

查询可释放的空间

select file# ,df.bytes/1024/1024 file_M,
free_M ,HWM ,
(df.bytes - HWM * df.BLOCK_SIZE)/1024/1024 release_M
from v$datafile df
left join (select file_id ,sum(bytes)/1024/1024 free_M
from dba_free_space
group by file_id) fs
on df.file# = fs.file_id
left join (select file_id ,max(block_id + blocks - 1) HWM
from dba_extents
group by file_id) e
on df.file# = e.file_id
where file# = 10
order by 1;

FILE# FILE_M FREE_M HWM RELEASE_M
---------- ---------- ---------- ---------- ----------
10 128924 27.69 16498704 27.88

对索引重建

alter index ASC_MSG_PARA_MID_IDX rebuild online;


但是重建后再次执行上面的查询,水位升高了,空闲空间也增加了
FILE# FILE_M FREE_M HWM RELEASE_M
---------- ---------- ---------- ---------- ----------
10 139924 128873 17907984 17.87

请问这是什么原因呢?我要怎样释放这个数据文件的空间呢?
...全文
67 点赞 收藏 1
写回复
1 条回复
zhouxiaofeng1021 2014年03月03日
原因就是 在创建表后,你在这个过程中有过增删改过表中的索引字段 update还有delete都会导致索引占用空间变大! 还有很多曾经使用的索引占用空间没有被使用 如果一直存在大量的update还有delete会导致索引不可用! 使用重建索引会提高空间利用率和空闲空间 索引空间只能够重建索引来提高利用空间的效率
回复 点赞
发动态
发帖子
基础和管理
创建于2007-09-28

7175

社区成员

9.5w+

社区内容

Oracle 基础和管理
社区公告
暂无公告