降低一个表的高水位线(HWM)的6种方式,6种方式修正ORACLE表的高水位线
在ORACLE中,执行对表的删除操作不会降低该表的高水位线。而全表扫描将始终读取一个段(extent)中所有低于高水位线标记的块。如果在执行删除操作后不降低高水位线标记,则将导致查询语句的性能低下。
下面的方法都可以降低高水位线标记。
(1). 执行表重建指令 alter table table_name move;
在线转移表空间ALTER TABLE ... MOVE TABLESPACE ..
当你创建了一个对象如表以后,不管你有没有插入数据,它都会占用一些块,ORACLE也会给它分配必要的空间.同样,用ALTER TABLE MOVE释放自由空间后,还是保留了一些空间给这个表.
ALTER TABLE ... MOVE 后面不跟参数也行,不跟参数表还是在原来的表空间,Move后记住重建索引。如果以后还要继续向这个表增加数据,没有必要move,只是释放出来的空间,只能这个表用,其他的表或者segment无法使用该空间。
(2). 执行alter table table_name shrink space;
alter table CHANNEL_GROUP enable row movement;
alter table CHANNEL_GROUP shrink space;
注意,此命令为Oracle 10g新增功能,再执行该指令之前必须允许行移动 alter table table_name enable row movement;
如果要同时压缩表的索引:ALTER TABLE TEST_TAB SHRINK SPACE CASCADE
(3). 复制要保留的数据到临时表t,drop原表,然后rename临时表t为原表
[1].临时表方式.
select tablespace_name from tabs where table_name='ABIS_ASSIGNMENT_COMMAND';--TABSPA_YF_ABIS
create table ABIS_ASSIGNMENT_COMMAND_COPY tablespace TABSPA_YF_ABIS nologging as select * from ABIS_ASSIGNMENT_COMMAND;
alter table ABIS_ASSIGNMENT_COMMAND_COPY rename to ABIS_ASSIGNMENT_COMMAND;
drop table E ABIS_ASSIGNMENT_COMMAND_COPY;
commit;
[2].如果要删除掉一个非分区表的大部分数据,又要降低这个表的高水位线,可以这么做.
select table_name,tablespace_name from user_tables where table_name=upper('internal_cell1');--TABSPA_CDD
create table internal_cell1_copy tablespace TABSPA_CDD nologging as select * from internal_cell1 where ttime!='2014-01-13';
commit;
drop table internal_cell1;
alter table internal_cell1_copy rename to internal_cell1;
commit;
[3].如果只要一个表的表结构,不复制数据,可以这么做。
create table site_info_copy tablespace TABSPA_CDD nologging as select * from site_info where 1=2;
(4). 用逻辑导入导出: Emp/Imp
exp 'scott/fsyd' file='E:\serveral_tablels.dmp' tables=(cy_cell_list,site_info,CELTCHF,region_list)
imp 'scott/fsyd' file='F:\从249导过来的数据\serveral_tablels.dmp' tables=(cy_cell_list,site_info,CELTCHF,region_list)
(5). Alter table table_name deallocate unused
execute immediate 'truncate table cy_xinzhan_guihua_advice';
execute immediate 'alter table cy_xinzhan_guihua_advice deallocate UNUSED KEEP 0';
注:这证明,DEALLOCATE UNUSED为释放HWM上面的未使用空间,但是并不会释放HWM下面的自由空间,也不会移动HWM的位置.
(6). 尽量使用truncate.
分享到:
相关推荐
如果使用:db2 list tablespaces show detail,看到某个DMS表空间的已用页数低于高水位标记,则有可能通过如下方法降低高水位标记:重组表空间的某个表;或者将某个表中的数据导出,然后将它删除,重新创建该表再将...
内容概要:本文详细介绍了 Oracle 19c 数据库中的高水位线 (High Water Mark, HWM) 概念及其操作。首先解释了 HWM 的定义和特点,随后探讨了 HWM 对全表扫描和插入操作的影响。文中通过具体的 SQL 示例,展示了如何...
高水位(HWM)是一个重要的概念,在Oracle数据库管理中扮演着关键角色。通过理解和掌握如何管理和优化HWM,可以显著提高数据库性能和空间利用率。上述提供的方法和技术可以帮助数据库管理员有效地解决因HWM引起的...
HWM(High Water Mark),即高水位线,是段内的一个标记,指示了数据的最高达到位置。当数据被删除后,块虽然变为空闲,但HWM并不会自动下移,除非使用`ALTER TABLE ... DEALLOCATE UNUSED`命令。HWM的存在影响了...
Oracle 读取表中所有的行,扫描该表中高水位线(HWM, High Water Mark)以下的所有数据块。随着数据量的增加,高水位线会不断上涨,读取的数据块就会不断增加。在做 Delete 操作的时候,即使把表中的数据都删掉了,...
Oracle数据库中的高水位(HWM)概念对于理解为何需要整理表碎片至关重要。高水位是指数据段中已使用过和未使用过的数据块之间的分界线。在高水位以下的数据块曾经被使用过,而以上则是从未被使用或初始化过的空间。...
- **高水位线(HWM)**:是衡量数据占用空间的一个指标。当数据插入时,HWM会上升,但即使数据被删除,HWM也不会自动下降,这会导致一些空间的浪费。全表扫描操作会读取HWM以下的所有数据块,因此优化HWM管理对提高...
- **优化性能**:通过调整表的水位线(High Water Mark, HWM),可以显著提高查询性能。 - **易于管理**:简化了数据库管理流程,提高了管理效率。 #### 五、重组的原因 1. **数据存取**:通过存取操作减少在线数据...
它移动高水位线(High Water Mark, HWM),并不需要回滚段(Rollback Segment)。`TRUNCATE`操作无法通过回滚来撤销,速度较快。 - `DELETE`: 是一种DML(数据操作语言)操作,用于逐行删除表中的记录。需要回滚段...