oracle, 表索引占用空间非常大, 15g以上了, 重建索引后所用空间缩减为原来不到1/5, 这是啥原因?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle, 表索引占用空间非常大, 15g以上了, 重建索引后所用空间缩减为原来不到1/5, 这是啥原因?相关的知识,希望对你有一定的参考价值。
使用的是 alter index xxx rebuild online 重建索引.
据我现在知道的情况是,oracle的索引会有很多无效的索引目录,因为数据的修改(删除,更新)导致一些索引无效,但他们仍然占据着空间。下面是收集到的资料:
接合索引COALESCING INDEXES(碎片整理)
ALTER INDEX INDX COALESCE;
检查索引的有效性(一个更新索引统计信息的过程,相应数据字典中相关的信息发生改变)
ANALYZE INDEX IDX VALIDATE STRUCTURE;
DESC INDEX_STATS;
希望回到能够解答你的疑惑来自:求助得到的回答 参考技术A 碎片太多,重建之后把无效的索引块释放出来了
Oracle查看表占用空间
Oracle查看表占用空间
查看表空间对应日志文件
select
tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
查看表空间总大小、使用率、剩余空间
select
a.tablespace_name, total, free, total-free as used, substr(free/total * 100, 1, 5) as "FREE%", substr((total - free)/total * 100, 1, 5) as "USED%"
from
(select tablespace_name, sum(bytes)/1024/1024 as total from dba_data_files group by tablespace_name) a,
(select tablespace_name, sum(bytes)/1024/1024 as free from dba_free_space group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
order by a.tablespace_name;
查看具体表的占用空间大小
select * from (
select t.tablespace_name,t.owner, t.segment_name, t.segment_type, sum(t.bytes / 1024 / 1024) mb
from dba_segments t
where t.segment_type='TABLE'
group by t.tablespace_name,t.OWNER, t.segment_name, t.segment_type
) t
order by t.mb desc;
以上是关于oracle, 表索引占用空间非常大, 15g以上了, 重建索引后所用空间缩减为原来不到1/5, 这是啥原因?的主要内容,如果未能解决你的问题,请参考以下文章