【问题标题】:Oracle disk space used by a table表使用的 Oracle 磁盘空间
【发布时间】:2010-09-17 00:12:39
【问题描述】:

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

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

谢谢,

【问题讨论】:

    标签: oracle diskspace


    【解决方案1】:

    本文报道了一种获取表增长的方法: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');
    

    【讨论】:

      【解决方案2】:

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

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

      另外,更新是如何影响事物的?如果一行从 50 字节开始,两个月后增长到 150 字节,那么这 100 字节是如何计算的?

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

      【讨论】:

      • 使用 DBA_SEGMENTS 而不是 DBA_TABLES。它会准确地告诉您一个对象在磁盘上使用了多少空间,并且不依赖于估计或统计数据。
      • 请记住,表可以由 DBA_TABLES 不考虑的分区组成。正如 jonearles 所建议的那样,DBA_SEGMENTS 并考虑分区,如果您想包含二进制对象列(BLOB、CLOB),DBA_LOBS 也是因为未内联存储的 LOB 位于它们自己的段中。
      • 据我所知 AVG_ROW_LEN 是优化器统计数据,而不是真正的度量。我的意思是,通过适当的权限,您可以覆盖它的值。见download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/…
      猜你喜欢
      • 2019-12-12
      • 1970-01-01
      • 2015-04-05
      • 2020-07-12
      • 2023-03-17
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多