Oracle的高水位

一、什么是高水位

  高水位(HWM)用来标记段内纳数据的上限,高水位存在段头部,当发生全表扫描时会先读段头块。
ORACLE用HWM来界定一个段中使用的块和未使用的块。原则上HWM只会增大,不会缩小。

  • Low HWM用来标示已经被格式化的块。
  • High HWM以上都是未格式化未分配的块。
  • 在Low HWM和High HWM之间可能存在formated block也可以可能存在unformatted block。
    在这里插入图片描述

二、HWM的影响

  • 全表扫描通常要读出直到HWM标记的所有的属于该表数据库块,即使该表中没有任何数据,所以HWM标记过大会导致性能较差。
  • 即使HWM以下有空闲的数据库块,键入在插入数据时使用了append关键字,则在插入时使用HWM以上的数据块,此时HWM会自动增大。

三、如何查看高水位

SELECT NUM_ROWS,AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9 NEED, BLOCKS*8/1024 TRUE,(BLOCKS*8/1024-AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9) RECOVER_MB,TABLE_NAME FROM dba_tables WHERE tablespace_name='' AND BLOCKS*8/1024-AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9>100 AND rownum<11 order by RECOVER_MB desc; 

四、释放表高水位方法

  • 对表进行MOVE操作:ALTER TABLE TABLE_NAME MOVE;。若表上存在索引,则记得重建索引。
  • 对表进行SHRINK SPACE操作:ALTER TABLE TABLE_NAME SHRINK SPACE;,注意,在执行该指令之前必须开启行移动:ALTER TABLE TABLE_NAME ENABLE ROW MOVEMENT;。该方法的优点是:在碎片整理结束后,表上相关的索引仍然有效,缺点是会产生大量的UNDO和REDO。
  • 复制要保留的数据到临时表T,DROP原表,然后RENAME临时表T为原表。
  • exp/imp或expdp/impdp重构表。
  • 若表中没有数据则直接使用TRUNCATE来释放高水位。

猜你喜欢

转载自blog.csdn.net/qq_42979842/article/details/108500962