如何从Direct Path / * + APPEND * / Inserts中查找表中浪费了多少空间?

时间:2018-04-11 22:59:42

标签: oracle oracle12c

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

我有一个表,其中没有执行任何删除,更新或传统插入 - 唯一的操作是直接路径插入。

如何判断由于滥用直接路径插入而浪费了高水位以下每个区块的空间?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

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

然后dbms_space包将帮助你。

来自您对问题的描述和您的回复/徽章,

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