Oracle清除表的高水位线

在新增记录时,HWM会慢慢往上移,但是在删除记录后,HWM却不会往下移。所以在使用delete from命令删除大量数据时会导致因HWM引起的性能问题。

删除高水位的最直接的方法就是truncate Table 但是这种方式太过暴力,所以用以下的方法来删除高水位线。

--删除数据

DELETE FROM GJDS_BUS_OIL_LOG

WHERE VERSION < (13112-100);

--压缩快

move最好是在空闲时做  记得move的是会产生TM锁的  move以后记得重建index

ALTER TABLE GJDS_BUS_OIL_LOG MOVE;

--压缩快之后所有索引都会失效,需要重建一下索引

ALTER INDEX INDEX_NAME REBUILD;

--然后分析下表

ANALYZE TABLE GJDS_BUS_OIL_LOG COMPUTE STATISTICS FOR TABLE FOR ALL INDEXES FOR ALL INDEXED COLUMNS;

--查看块总数

SELECT SEGMENT_NAME, EXTENTS, BLOCKS

FROM USER_SEGMENTS

WHERE SEGMENT_NAME = ‘GJDS_BUS_OIL_LOG‘;

--查看高水位

SELECT BLOCKS, EMPTY_BLOCKS

FROM DBA_TABLES

WHERE TABLE_NAME = ‘GJDS_BUS_OIL_LOG‘

AND OWNER = ‘BUS‘;

--查看实际用了多少块

SELECT COUNT(DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)) USED_BLOCK

FROM GJDS_BUS_OIL_LOG S;

另一种方法是使用SHRINK SPACE

以下情况不能使用SHRINK SPACE

■ IOT mapping tables
■ Tables with rowid based materialized views
■ Tables with function-based indexes       --函数索引
■ SECUREFILE LOBs
■ Compressed tables

如果有函数索引需要删除函数索引才可以使用

--启用ROW MOVEMENT

ALTER TABLE GJDS_BUS_OIL_LOG ENABLE ROW MOVEMENT;

--压缩段

ALTER TABLE GJDS_BUS_OIL_LOG SHRINK SPACE;

同样需要重建索引和重新分析表

参考资料:http://www.blogjava.net/decode360/archive/2009/07/14/287767.html

时间: 2024-08-04 02:43:43

Oracle清除表的高水位线的相关文章

一、oracle 高水位线详解

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

oracle 高水位线详解

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

Oracle数据库入门——高水位线详解

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

高水位线引起的查询变慢解决方法

众所周知,随着不断地进行表记录的DML操作,会不断提高表的高水位线(HWM),DELETE操作之后虽然表的数据删除了,但是并没有降低表的高水位,除非你使用TRUNCATE操作,进行表查询的时候,Oracle会扫表高水位以下的数据块,也就是说,扫描的时间并不会有所减少.所以DELETE删除数据以后并不会提高表的查询效率. 下面通过这个例子,用来解决高水位引起的查询变慢问题: --例子中测试表占用表空间大小为:128M SQL> SELECT a.bytes/1024/1024 || 'M' FRO

高水位线

一.什么是水线(High Water Mark)? 所有的Oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称为"high water mark"或HWM.这个HWM是一个标记,用来说明已经有多少没有使用的数据块分配给这个segment.HWM通常增长的幅度为一次5个数据块,原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值,由于这个特点,使HWM很象一个水库的历史最高水位

全扫描与高水位线

对扫描进行多块读取调用时,Oracle将最多读取到位于表中高水位线的数据块.高水位线标出了表中最后一块有数据写入的数据块. 当数据行插入一张表中的时候,就会为其分配数据块并将数据行放到其中.如下图所示. 在经过一系列操作之后,数据行被从表中删除.如下图为删除掉很多行之后的情景. 即使几乎所有数据行都被删除了并且一些实际上已经完全变成空的了,高水位线还是保持不变.进行全扫描时,到高水位线为止的所有数据块都将被读取并扫描,即使他们是空的. 如下给出了即使表中的所有行都被删除掉了,高水位线还是保持不变

通过段调优顾问回收大表的分配空间和高水位线

--通过段调优顾问回收大表的分配空间和高水位线 --创建用户 SQL> create tablespace hzqtbs datafile '/u01/app/oracle/oradata/prod/hzqtbs.dbf' size 30m; Tablespace created. SQL> create user hzq identified by hzq default tablespace hzqtbs quota unlimited on hzqtbs account unlock;

oracle 高水位线

在Oracle数据的存储中,可以把存储空间想象为一个水库,数据想象为水库中的 水.水库中的水的位置有一条线叫做水位线,在Oracle中,这条线被称为高水位线(High-warter mark, HWM).在数据库表刚建立的时候,由于没有任何数据,所以这个时候水位线是空的,也就是说HWM为最低值.当插入了数据以后,高水位线就会上涨,但是这 里也有一个特性,就是如果你采用delete语句删除数据的话,数据虽然被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位.也就是 说,这条高水位

降低Oracle高水位线的方法

1. 执行表重建指令 alter table table_name move(验证不可行,不降低水位线,但可释放表空间)当你创建了一个对象如表以后,不管你有没有插入数据,它都会占用一些块,ORACLE也会给它分配必要的空间.同样,用ALTER TABLE MOVE释放自由空间后,还是保留了一些空间给这个表. ALTER TABLE ... MOVE 后面不跟参数也行,不跟参数表还是在原来的表空间,Move后记住重建索引.查询失效索引语句:select index_name,table_name,