表使用的Oracle磁盘空间

时间:2010-09-17 00:12:40

标签: oracle diskspace

我在Oracle数据库中有一个表,每个月会有几百万个新行。每行都有一列说明创建日期。

我想运行一个查询,在过去6个月内获得磁盘空间增长。换句话说,结果将是一个包含两列的表,其中每一行都有该月份的名称和磁盘空间。

谢谢,

2 个答案:

答案 0 :(得分:4)

本文报告了一种获取表增长的方法:http://www.dba-oracle.com/t_table_growth_reports.htm

column "Percent of Total Disk Usage" justify right format 999.99
column "Space Used (MB)" justify right format 9,999,999.99
column "Total Object Size (MB)" justify right format 9,999,999.99
set linesize 150
set pages 80
set feedback off

select * from (select to_char(end_interval_time, 'MM/DD/YY') mydate, sum(space_used_delta) / 1024 / 1024 "Space used (MB)", avg(c.bytes) / 1024 / 1024 "Total Object Size (MB)", 
round(sum(space_used_delta) / sum(c.bytes) * 100, 2) "Percent of Total Disk Usage"
from 
   dba_hist_snapshot sn, 
   dba_hist_seg_stat a, 
   dba_objects b, 
   dba_segments c
where begin_interval_time > trunc(sysdate) - &days_back
and sn.snap_id = a.snap_id
and b.object_id = a.obj#
and b.owner = c.owner
and b.object_name = c.segment_name
and c.segment_name = '&segment_name'
group by to_char(end_interval_time, 'MM/YY'))
order by to_date(mydate, 'MM/YY');

答案 1 :(得分:2)

DBA_TABLES(或等效的)给出AVG_ROW_LEN,因此您可以简单地将其乘以每月创建的行数。

需要注意的是,它假定新行的行长度与现有行的行长度相似。如果您有一堆“小”的历史数据(例如50个字节)但新行更大(150个字节),那么估计值将会太低。

此外,更新如何形成事物?如果一行以50字节开始并在两个月后增长到150,那么如何计算这100个字节?

最后,每个行插入的表都不会增长。每隔一段时间,分配的空间就会填满,然后分配另一个块。根据表设置,下一个块可能是,例如,现有表大小的50%。因此,你可能不会在三个月内身体成长,然后大幅度跳跃,然后再长达六个月。