Oracle 降低高水位线

高水位线


什么是高水位线(High Water Mark)?
所有的oracle段(segments)都有一个在段内容纳数据的上限,我们把这个上限称为“High Water Mark”
或HWM。这个HWM是一个标记,用来说明已经有多少没有使用的数据块分配给这个segment。HWM通常增长的
幅度为一次5个数据库,原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值,
由于这个特点,使HWM很像一个水库的历史最高水位。


HWM数据库的操作有如下影响:


a) 全表扫描通常要读出直到HWM标记的所有的属于该表数据库块,即使该表中没有任何数据。


b)即使HWM以下有空闲的数据库块,键入在插入数据时使用了append关键字,则在插入的时候使用HWM以上
   的数据块此时HWM会自动增大。


如何知道一个表的HWM


实验如下过程:


1)创建一个表插入一些数据


SQL> select * from t2;


NAME
-----------------------------------------------
半角北京(科技)有限(责任)公司
北京(科技)有限(责任)公司
半角北京(科技)有限(责任)公司
北京(科技)有限(责任)公司
半角北京(科技)有限(责任)公司
北京(科技)有限(责任)公司
半角北京(科技)有限(责任)公司
北京(科技)有限(责任)公司
半角北京(科技)有限(责任)公司


已选择9行。


SQL> analyze table t2 estimate statistics;


表已分析。


SQL> select blocks, empty_blocks, num_rows from user_tables where table_name='T2';


    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
         4            4          9


SQL> insert into t2 select * from t2;


已创建9行。


SQL> /


已创建18行。


SQL> /


已创建36行。


。。。


SQL> /


已创建18432行。


SQL> analyze table t2 compute statistics;


表已分析。


SQL> select blocks, empty_blocks, num_rows from user_tables where table_name='T2';


    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
       247            9      36864


SQL> delete t2 where rownum<50000;


已删除36864行。


SQL> select blocks, empty_blocks, num_rows from user_tables where table_name='T2';


    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
       247            9      36864


SQL> analyze table t2 compute statistics;


表已分析。


SQL> select blocks, empty_blocks, num_rows from user_tables where table_name='T2';


    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
       247            9          0


SQL> alter table t2 enable row movement;


表已更改。


SQL> alter table t2 shrink space;


表已更改。


SQL> select blocks, empty_blocks, num_rows from user_tables where table_name='T2';


    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
       247            9          0


SQL> analyze table t2 compute statistics;

表已分析。

SQL> select blocks, empty_blocks, num_rows from user_tables where table_name='T2';


    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
         1            7          0

SQL> alter table t2 disable row movement;

表已更改。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28282660/viewspace-1479094/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28282660/viewspace-1479094/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值