您好,欢迎访问一九零五行业门户网

Oracle计算表所占用空间大小

在oracle数据库中,如何计算一个表所占用的存储空间呢?我们可以通过系统视图dba_segments、user_segmetns、dba_tables来查看一个
在oracle数据库中,,如何计算一个表所占用的存储空间呢?我们可以通过系统视图dba_segments、user_segmetns、dba_tables来查看一个表所占空间的大小,如下所示:
select segment_name              table_name
      ,sum(blocks)              blocks
      ,sum(bytes)/(1024*1024)    table_size[mb]
from user_segments
where  segment_type='table'
  and segment_name=&table_name
group by segment_name;
select segment_name              table_name
      ,sum(blocks)              blocks
      ,sum(bytes)/(1024*1024)    table_size[mb]
from dba_segments
where  segment_type='table'
  and segment_name=&table_name
group by segment_name;
注意,如果你通过系统视图dba_tabels、user_tables统计、查看表所占的空间大小,那么由于统计信息过时或总是持续有dml操作(insertr、update、delete),那么有可能用下面sql统计出的信息可能不准确。需要先收集一下表对象的统计信息。 另外,可能每个数据库的db_block_size有所不同,不一定是8192。所以注意修改.
analyze table owner.table_name compute statistics;

exec dbms_stats.gather_table_stats('owner','table_name');
select owner                    owner_name
      ,table_name              table_name
      ,tablespace_name          tablespace_name
      ,blocks                  actual_blocks
      ,blocks + empty_blocks    total_blocks
      ,(blocks + empty_blocks) * 8192/(1024*1024)
                                table_size[mb]
from dba_tables
where owner=&owner
  and table_name=&table_name
关于dba_tables和dba_segments表中的block的区别,其实它们的关系如下所示:
      自动段空间管理(automatic segment space management assm)
              dba_segments.blocks = dba_tables.blocks + dba_tables.empty_blocks
      本地管理表空间(locally managed tablespace )
              dba_segments.blocks = dba_tables.blocks + dba_tables.empty_blocks+ 1(segment header block)
dba_segments.blocks      holds the total number of blocks allocated to the table.
dba_tables.blocks        holds the total number of blocks allocated for data.
dba_segments中的blocks表示分配给表的存储空间,而dba_tables中blocks表示表中数据实际占有的存储空间。所以这个是有细微差别的。所以你如果要查表的实际占用大小,那么就要使用dba_tables来查询。查看数据库中占用存储空间从大到小的所有表对象
select segment_name              table_name
      ,sum(blocks)              blocks
      ,sum(bytes)/(1024*1024)    table_size[mb]
from dba_segments
where  segment_type='table'
group by segment_name
order by blocks desc;
本文永久更新链接地址:
其它类似信息

推荐信息