Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
表使用的Oracle磁盘空间_Oracle_Diskspace - Fatal编程技术网

表使用的Oracle磁盘空间

表使用的Oracle磁盘空间,oracle,diskspace,Oracle,Diskspace,我在OracleDB中有一个表,它每个月会得到几百万行新行。每一行都有一列,列中说明创建该行的日期 我想运行一个查询,获取过去6个月的磁盘空间增长。换句话说,结果将是一个包含两列的表,其中每行都有当月的名称和当月使用的磁盘空间 谢谢,本文报告了一种获取表增长的方法: DBA_表(或等效表)给出了一个平均行长度,因此您可以简单地将其乘以每月创建的行数 需要注意的是,它假设新行的行长度与现有行的行长度相似。如果您有一堆“小”(例如50字节)但新行较大(150字节)的历史数据,那么估计值将太低 还有,

我在OracleDB中有一个表,它每个月会得到几百万行新行。每一行都有一列,列中说明创建该行的日期

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


谢谢,

本文报告了一种获取表增长的方法:

DBA_表(或等效表)给出了一个平均行长度,因此您可以简单地将其乘以每月创建的行数

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

还有,更新是如何体现的?如果一行从50字节开始,两个月后增长到150字节,如何解释这100字节


最后,表不会随着每行插入而增长。每隔一段时间,分配的空间就会被填满,它就会去分配另一个块。根据表格设置,下一个区块可能是现有表格大小的50%。因此,您可能在三个月内没有实际增长,然后有一个巨大的跳跃,然后在接下来的六个月内没有增长。

使用DBA_段而不是DBA_表。它将准确地告诉您一个对象在磁盘上使用了多少空间,并且它不依赖于估计或统计数据。请记住,一个表可以由DBA_表不会考虑的分区组成。正如jonearles所建议的,DBA_分段并考虑分区,同样,如果您想包括二进制对象列(BLOB,CLOB),DBA_LOB也是因为未内联存储的LOB位于它们自己的分段中。据我所知,AVG_ROW_LEN是一个优化器统计数据,而不是一个真正的度量。我的意思是,有了适当的权限,你可以覆盖它的值。看见
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');