【PL/SQL】HWM 高水位 含义/解决之道

看完这章你会学习到以下内容:

  • HWM是什么意思?
  • HWM有何影响?
  • HWM在哪里可以查询?
  • HWM问题如何解决?

【PL/SQL】HWM 高水位 含义/解决之道_第1张图片


HWM是什么意思?
A)HWM指的是所有oracle的segments 都有一个在段内容纳数据的上限,我们把这个上限称为"high water mark"或HWM。
反过来讲,HWM说明还有多少没有被使用的数据块分配给这个segment。
数据块 - 区 - 段 - 表空间


HWM有何影响?
B) 全表扫描通常要读出直到HWM标记的所有的属于该表数据库块,即使该表中没有任何数据。 即使HWM以下有空闲的数据库块,键入在插入数据时使用了append关键字,则在插入时使用HWM以上的数据块,此时HWM会自动增大。
仅有DML(比如delete,insert)操作时,高水位线只会增长,不会降低。具体来说,由于程序使用的delete语句不回收使用过的空间,数据虽然删除了,但是高水位线却没有降低,仍然处于之前的水位。


C) 查看用户表是否高水位?
第一种方法:
用User_tables 中的 Blocks,empty_Block 和num_rows方法查看一张表里面的数据块有多少。

SELECT
    blocks, --该表曾经使用过的数据块的数目,即水线
    empty_blocks,  --代表分配给该表,但是在水位线以上的数据块,即从来没有使用过的数据块
    num_rows
FROM 
    user_tables
WHERE
    table_name = ‘table_name’;

【PL/SQL】HWM 高水位 含义/解决之道_第2张图片

第二种方法:
在SYS用户里操作查询数据字典,如果SYS有赋予权利给其它用户的话也行,输入如下:

SELECT TABLESPACE_NAME
       ,BYTES/1024/1024 AS FREE_MB -- 已用的
             ,MAXBYTES/1024/1024 AS MAX_MB FROM DBA_DATA_FILES;

【PL/SQL】HWM 高水位 含义/解决之道_第3张图片


素材提供:
1.ORACLE 11g 生产中高水位线(HWM)处理
2.Oracle 高水位(HWM)回收原理及操作方法
3.[Oracle]高水位标记(HWM)

你可能感兴趣的:(oracle,plsql)