看完这章你会学习到以下内容:
- 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)回收原理及操作方法
3.[Oracle]高水位标记(HWM)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。