Oracle中的HWM

    1.什么是高水位线(High Water Mark)
数据库

        对于一个段(逻辑上其实能够说一个表),有一个段里容纳数据的上限,这个上限就是高水位线。一般这个HWM只会增长不会减小,由于它记录的是存储数据最多时刻的上限。
spa

    2.它的影响
orm

        在数据库表刚创建的时候,因为没有任何数据,因此这个时候水位线是空的,也就是说HWM为最低值。当插入了数据之后,高水位线就会上涨,可是这里也有一个特性,就是若是你采用delete语句删除数据的话,数据虽然被删除了,可是高水位线却没有下降,仍是你刚才删除数据之前那么高的水位。也就是说,这条高水位线在平常的增删操做中只会上涨,不会下跌。it

        当咱们select的时候,Oracle是根据HWM来肯定所要扫描的数据块的个数的。也正是由于这个特性,因此即便这个HWM下有许多空的数据块,也同样是要扫描的,这也就是为何有些人表里没什么数据,可是查询时间依然长的缘由。所以,若是咱们要删除这个表的所有数据,应当使用turncate语句删除表中数据,这样这个段的HWM会重置为0。
table

    3.查询这个段的高水位线
sed

        那么如何查询这个HWM呢。select

a)分析这个表:ANALYZE TABLE <tablename> ESTIMATE/COMPUTE STATISTICS.数据

b) 查询:  SELECT blocks, empty_blocks, num_rows查询

    FROM user_tablesmargin

    WHERE table_name = <tablename>;

        这里的blocks正是曾经使用过的块数目。

    4.修正这个HWM

        要想修正这个HWM,若是数据都不要了,直接turancate,若数据须要,能够经过重建表再插入的方式。

        好比复试数据到临时表,而后drop原表,在rename临时表或者alter table table_name deallocate unused(彷佛要考虑到extent)

相关文章
相关标签/搜索