如何收回索引的空闲空间

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

请问这是什么原因呢?我要怎样释放这个数据文件的空间呢?
...全文
96 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouxiaofeng1021 2014-03-03
  • 打赏
  • 举报
回复
原因就是 在创建表后,你在这个过程中有过增删改过表中的索引字段 update还有delete都会导致索引占用空间变大! 还有很多曾经使用的索引占用空间没有被使用 如果一直存在大量的update还有delete会导致索引不可用! 使用重建索引会提高空间利用率和空闲空间 索引空间只能够重建索引来提高利用空间的效率

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧