【问题标题】:How to find how much space is wasted in a table from Direct Path /*+ APPEND */ Inserts?如何从 Direct Path /*+ APPEND */ Inserts 中查找表中浪费了多少空间?
【发布时间】:2018-04-11 22:59:42
【问题描述】:

直接路径插入表将使 Oracle 在高水位线之上创建新块,而传统插入将填充高水位线以下任何未使用/已释放的块。这就是为什么建议只对大量数据使用直接路径插入,因为重复的直接路径插入会浪费大量空间。

我有一个表,其中没有执行删除、更新或常规插入,唯一执行的操作是直接路径插入。

我怎样才能知道高水位线以下的每个块中有多少空间由于滥用直接路径插入而被浪费了?

【问题讨论】:

    标签: oracle oracle12c


    【解决方案1】:

    你可以通过一些简单的假设得到一个快速的近似值:

    SQL> select blocks, empty_blocks, round(avg_row_len * num_rows / ( 1 - pct_free/100) * ( 8192 / ( 8192 - 100 ) )/8192 ) guess_blks
      2  from user_tables
      3  where table_name = 'T';
    
        BLOCKS EMPTY_BLOCKS GUESS_BLKS
    ---------- ------------ ----------
          1563            0       1430
    

    所以在我的例子中,我的表消耗了 1563 个块,并使用行长 * 行数的粗略算法,针对 pctfree 进行了调整,并针对每个块的 100 字节开销进行了调整,我猜测我需要多少块大约是 1430。然后,我还可以将其与查看 user_segments 所消耗的实际空间进行比较

    SQL> select bytes/8192 from user_Segments
      2  where segment_name = 'T';
    
    BYTES/8192
    ----------
          1664
    

    【讨论】:

      【解决方案2】:

      首先你需要知道oracle中一张表的pctfree。

      那么 dbms_space 包会帮助你。

      根据您对问题的描述和您的声誉/徽章,

      我认为您的研究会很快获得详细信息。

      【讨论】:

      • 如果它有一个完整的例子,这可能是一个很好的答案。是的,OP可以根据你提供的信息自己研究,但是为什么要让他花费额外的精力呢?
      • @Jon Heller ,因为我只知道 pctfree/dbms_space 会帮助他。我还需要研究如何使用指定的方法/功能等细节。
      猜你喜欢
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      相关资源
      最近更新 更多