什么是高水位线? 高水位线(high-water mark,HWM) 在数据库中,如果把表想象成从左到右依次排开的一系列块, 高水位线就是曾经包含了数据 的最右边的块。
1.概览
HWM 有利有弊,原则上 HWM 只会增大,即使将表中的数据全部删除,HWM 也不会降低。 优点:可以使 HWM 以下的块重复利用 缺点:使用全表扫描时要读取 HWM 以下的所有 block,耗费更多的 IO 资源。
2.如何降低 HWM 高水位线
多种方法可以降低 HWM: 移动表 收缩表 导入导出表 在线重定义表
3.收缩表 shrink
Shrink 方法,也叫段重组,表收缩的底层实现的是通过匹配的 INSERT 和 DELETE 操作
SYS@PROD> create table scott.t3 as select * from dba_objects; SYS@PROD> select count(*) from scott.t3; analyze table scott.t3 compute statistics; select k.table_name,k.blocks,k.empty_blocks,num_rows from dba_tables k where k.owner ='SCOTT' and k.table_name ='T3'
SYS@PROD> delete from scott.t3 where rownum<4000; analyze table scott.t3 compute statistics; num_rows 已经减掉了 4000 条, 但 blocks 并没有减少, 说明 HWM 没有下降。
开启行迁移 SYS@PROD> alter table scott.t3 enable row movement; --先压缩 alter table scott.t3 shrink space compact; analyze table scott.t3 compute statistics for table; --降低水位线 alter table scott.t3 shrink space; --关闭行迁移 alter table scott.t3 disable row movement;