共计 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) 回收原理及操作方法
正文完