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, 这是啥原因?的主要内容,如果未能解决你的问题,请参考以下文章

oracle 查询出 表的空间大小 占用存储空间

我刚增加了15G的表空间,oracle,已经创建成功,请问我如何才能删除这个刚建的表空间?

Oracle-创建索引分区

oracle下查看表、索引、分区表用空间大小

数据库sql大字段占用临时表空间

Oracle修改表和索引的INITIAL初始化大小