PLSQLHWM-高水位-含义解决之道

5次阅读

共计 804 个字符,预计需要花费 3 分钟才能阅读完成。

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

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

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’;

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

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


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

正文完
 0