- 浏览: 498043 次
- 性别:
文章分类
- 全部博客 (369)
- Java (48)
- Struts (1)
- Spring (4)
- Hibernate (7)
- WebServices (2)
- XML (3)
- web服务器 (12)
- PHP (16)
- FLEX (13)
- Flash (7)
- JavaScript (35)
- Ajax (4)
- Jquery (18)
- EXTJS (7)
- CSS (7)
- HTML (7)
- JSON (5)
- 好玩的 (1)
- 其他 (21)
- Oracle (35)
- mysql (12)
- Linux (12)
- JDBC (2)
- EJB3 (1)
- AOP (1)
- 正则表达式 (6)
- JSF (1)
- 设计模式 (1)
- RBAC (1)
- PowerDesigner (1)
- windows (1)
- 电脑工具软件 (3)
- SEO (3)
- maven (13)
- cms (9)
- JSP (5)
- jpbm (1)
- eclipse (8)
- sql (4)
- android (3)
- 浏览器 (5)
- 国外IT网站 (1)
- 文摘 (1)
- 文档 (31)
- doc命令 (1)
- webgl (1)
- html5 (1)
- ant (1)
- mongodb (0)
- 操作系统 (1)
- Dreamweaver (1)
- hadoop (2)
- xpath (1)
- nutch (1)
- window (1)
- xm (2)
- excel (1)
- httpclient (0)
- YII (2)
- CXF (1)
- Quartz (1)
- jsoup (2)
- wifi (2)
- logback (1)
- 硬件 (1)
- 工具 (3)
- freemark (1)
- ide (2)
- mail (1)
- log (1)
- ueditor (1)
- 链接 (1)
- reaver (2)
- js (1)
- .net (1)
- chrome (1)
- git (1)
- Docker (1)
- unicode (1)
- 多线程 (1)
- 并发 (1)
- Nashorn (3)
- Angular (1)
- curl (1)
- Cygwin (1)
- nashron (1)
- Babel (1)
- React Native (1)
- sip (1)
- openmeetings (1)
- IDEA (0)
- CAS (1)
最新评论
-
沉醉音乐的咖啡:
使用 preventDefault() 函数来阻止对表单的提交。 -
PhoenixHorse:
原表的索引啥的不就失效了吗
oracle修改表精度 -
yupengcc:
资料带走 3Q
RBAC模型 -
Java路:
...
JSON-LIB快速入门(转) -
damoqiongqiu:
utf-8下,E文字符占1个字节,中文字符占3个字节。如果一个 ...
AS3:截取定长度的字符串
HWM的一些特性
1 oracle用HWM来界定一个段中使用的块和未使用的块。
当我们创建一个表:A时,ORACLE就会为这个对象分配一个段.在这个段中,即使我们未插入任何记录,也至少有一个区(64bit,也就是8个块)被分配,第一个区的第一个块就称为段头(SEGMENT HEADE),段头中就储存了一些信息,基中HWM的信息就存储在此.此时,因为第一个区的第一块用于存储段头的一些信息,虽然没有存储任何实际的记录,但也算是被使用,此时HWM是位于第2个块.当我们不断插入数据到A后,第1个块已经放不下后面新插入的数据,此时,ORACLE将高水位之上的块用于存储新增数据,同时,HWM本身也向上移.也就是说,当我们不断插入数据时,HWM会不断上移,这样,在HWM之下的,就表示使用过的块,HWM之上的就表示已分配但从未使用过的块.
2 HWM在插入数据时,当现有空间不足而进行空间的扩展时会向上移,但删除数据时不会往下移.
这就好比是水库的水位,当涨水时,水位往上移,当水退出后,最高水位的痕迹还是清淅可见.
删除数据后便存在浪费的空间,ORACLE 不会释放空间以供其他对象使用,有一条简单的理由:由于空间是为新插入的行保留的,并且要适应现有行的增长。被占用的最高空间称为最高使用标记 (HWM)。
3 HWM的信息存储在段头当中.
HWM本身的信息是储存在段头.在段空间是手工管理方式时,ORACLE是通过FREELIST(一个单向链表)来管理段内的空间分配.在段空间是自动管理方式时(ASSM),ORACLE是通过BITMAP来管理段内的空间分配.
4 ORACLE的全表扫描是读取高水位标记(HWM)以下的所有块
当用户发出一个全表扫描时,ORACLE 始终必须从段一直扫描到 HWM,即使它什么也没有发现。该任务延长了全表扫描的时间。
采用TRUNCATE语句删除一个表的数据的时候,类似于重新建立了表,不仅把数据都删除了,还把HWM给清空恢复为0。
5 当用直接路径插入行时 — 例如,通过直接加载插入(用 APPEND 提示插入)或通过 SQL*LOADER 直接路径 — 数据块直接置于 HWM 之上。它下面的空间就浪费掉了
在手动段空间管理(Manual Segment Space Management)中,段中只有一个HWM,但是在Oracle 9i Release1才添加的自动段空间管理(Automatic Segment Space Management)中,又有了一个低HWM的概念出来。为什么有了HWM还又有一个低HWM呢,这个是因为自动段空间管理的特性造成的。在手段段空间管理中,当数据插入以后,如果是插入到新的数据块中,数据块就会被自动格式化等待数据访问。而在自动段空间管理中,数据插入到新的数据块以后,数据块并没有被格式化,而是在第一次访问这个数据块的时候才格式化这个块。所以我们又需要一条水位线,用来标示已经被格式化的块。这条水位线就叫做低HWM。一般来说,低HWM肯定是低于等于HWM的。
额外扩展:
[TEST1@orcl] SQL>delete from c;
[TEST1@orcl] SQL>alter table c shrink space;
alter table c shrink space
*
第 1 行出现错误:
ORA-10636: ROW MOVEMENT is not enabled
[TEST1@orcl] SQL>alter table c enable row movement;
表已更改。
[TEST1@orcl] SQL>alter table c shrink space;
表已更改。
[TEST1@orcl] SQL>analyze table c compute statistics;
[TEST1@orcl] SQL>select table_name,blocks,empty_blocks from user_tables where table_name='C';
TABLE_NAME BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
C 1 7
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;
注意,此命令为Oracle 10g新增功能,再执行该指令之前必须允许行移动 alter table table_name enable row movement;
如果要同时压缩表的索引:ALTER TABLE TEST_TAB SHRINK SPACE CASCADE
(3). 复制要保留的数据到临时表t,drop原表,然后rename临时表t为原表
(4). 用逻辑导入导出: Emp/Imp
(5). Alter table table_name deallocate unused
注:这证明,DEALLOCATE UNUSED为释放HWM上面的未使用空间,但是并不会释放HWM下面的自由空间,也不会移动HWM的位置.
(6). 尽量使用truncate.
http://edu.21cn.com/oracle/g_50_761654-1.htm
http://blog.csdn.net/dba_waterbin/article/details/8573041
1 oracle用HWM来界定一个段中使用的块和未使用的块。
当我们创建一个表:A时,ORACLE就会为这个对象分配一个段.在这个段中,即使我们未插入任何记录,也至少有一个区(64bit,也就是8个块)被分配,第一个区的第一个块就称为段头(SEGMENT HEADE),段头中就储存了一些信息,基中HWM的信息就存储在此.此时,因为第一个区的第一块用于存储段头的一些信息,虽然没有存储任何实际的记录,但也算是被使用,此时HWM是位于第2个块.当我们不断插入数据到A后,第1个块已经放不下后面新插入的数据,此时,ORACLE将高水位之上的块用于存储新增数据,同时,HWM本身也向上移.也就是说,当我们不断插入数据时,HWM会不断上移,这样,在HWM之下的,就表示使用过的块,HWM之上的就表示已分配但从未使用过的块.
2 HWM在插入数据时,当现有空间不足而进行空间的扩展时会向上移,但删除数据时不会往下移.
这就好比是水库的水位,当涨水时,水位往上移,当水退出后,最高水位的痕迹还是清淅可见.
删除数据后便存在浪费的空间,ORACLE 不会释放空间以供其他对象使用,有一条简单的理由:由于空间是为新插入的行保留的,并且要适应现有行的增长。被占用的最高空间称为最高使用标记 (HWM)。
3 HWM的信息存储在段头当中.
HWM本身的信息是储存在段头.在段空间是手工管理方式时,ORACLE是通过FREELIST(一个单向链表)来管理段内的空间分配.在段空间是自动管理方式时(ASSM),ORACLE是通过BITMAP来管理段内的空间分配.
4 ORACLE的全表扫描是读取高水位标记(HWM)以下的所有块
当用户发出一个全表扫描时,ORACLE 始终必须从段一直扫描到 HWM,即使它什么也没有发现。该任务延长了全表扫描的时间。
采用TRUNCATE语句删除一个表的数据的时候,类似于重新建立了表,不仅把数据都删除了,还把HWM给清空恢复为0。
5 当用直接路径插入行时 — 例如,通过直接加载插入(用 APPEND 提示插入)或通过 SQL*LOADER 直接路径 — 数据块直接置于 HWM 之上。它下面的空间就浪费掉了
在手动段空间管理(Manual Segment Space Management)中,段中只有一个HWM,但是在Oracle 9i Release1才添加的自动段空间管理(Automatic Segment Space Management)中,又有了一个低HWM的概念出来。为什么有了HWM还又有一个低HWM呢,这个是因为自动段空间管理的特性造成的。在手段段空间管理中,当数据插入以后,如果是插入到新的数据块中,数据块就会被自动格式化等待数据访问。而在自动段空间管理中,数据插入到新的数据块以后,数据块并没有被格式化,而是在第一次访问这个数据块的时候才格式化这个块。所以我们又需要一条水位线,用来标示已经被格式化的块。这条水位线就叫做低HWM。一般来说,低HWM肯定是低于等于HWM的。
额外扩展:
[TEST1@orcl] SQL>delete from c;
[TEST1@orcl] SQL>alter table c shrink space;
alter table c shrink space
*
第 1 行出现错误:
ORA-10636: ROW MOVEMENT is not enabled
[TEST1@orcl] SQL>alter table c enable row movement;
表已更改。
[TEST1@orcl] SQL>alter table c shrink space;
表已更改。
[TEST1@orcl] SQL>analyze table c compute statistics;
[TEST1@orcl] SQL>select table_name,blocks,empty_blocks from user_tables where table_name='C';
TABLE_NAME BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
C 1 7
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;
注意,此命令为Oracle 10g新增功能,再执行该指令之前必须允许行移动 alter table table_name enable row movement;
如果要同时压缩表的索引:ALTER TABLE TEST_TAB SHRINK SPACE CASCADE
(3). 复制要保留的数据到临时表t,drop原表,然后rename临时表t为原表
(4). 用逻辑导入导出: Emp/Imp
(5). Alter table table_name deallocate unused
注:这证明,DEALLOCATE UNUSED为释放HWM上面的未使用空间,但是并不会释放HWM下面的自由空间,也不会移动HWM的位置.
(6). 尽量使用truncate.
http://edu.21cn.com/oracle/g_50_761654-1.htm
http://blog.csdn.net/dba_waterbin/article/details/8573041
发表评论
-
Oracle 查询时使用table_name 表的过程
2014-11-03 14:39 685select * from user_source t w ... -
查询Oracle 耗资源sql
2014-10-21 11:23 10591.查看总消耗时间最多的前10条SQL语句 select ... -
oracel分组排序最大记录
2014-08-28 17:21 549sql分组查询最大记录 1. select distinc ... -
ORACLE默认的事务隔离级别查看
2014-08-14 10:04 0declare trans_id Varch ... -
Oracle sqlplus 显示查询过程信息
2014-08-05 11:42 653命令:sqlplus 用户名/密码@ip地址[:端口]/s ... -
Oracle 删除所有session
2014-06-26 18:03 798select sid,serial#,v.* from ... -
表数据查询速度慢
2014-06-04 13:54 0表数据查询速度慢 作了降低水位线的处理,以后如果inse ... -
Oracle 函数
2014-04-10 10:04 673--decode函数替换 update table ... -
Oracle中复制表结构和表数据
2014-03-28 11:42 7031. 复制表结构及其数据: create table ... -
Oracle
2014-01-17 16:20 767oracle表分区详解 http://tianzt.bl ... -
Oracle
2014-01-15 11:34 754http://www.cnblogs.com/damonlan ... -
Oracle查看表结构
2013-10-09 18:42 748SELECT t1.Table_Name AS "表 ... -
查看oracle某个用户下有多少种对象类型,以及每种类型中对象的个数
2013-09-09 09:29 993select OBJECT_TYPE,COUNT(*) f ... -
sql 按日,周,月,年统计
2011-09-29 12:30 1284如: 表:consume_record 字段:consum ... -
oracle修改表精度
2011-03-24 20:38 2588oracle的 表a中有一个字段是number(6,2)类型的 ... -
Oracle的分页
2011-03-24 14:49 916Oracle的分页机制主要不外乎两种方法, 1. 使用row ... -
oracle 文档
2010-05-10 18:51 916oracle 资料 -
oracle 存储过程使用 sequence
2010-01-20 13:32 2750CREATE OR REPLACE PROCEDURE P ... -
sdfasdf
2009-11-19 10:26 951CREATE TABLESPACE "DBSPA ... -
linux下oracle 启动/关闭 isqlplus、me 启动/关闭
2009-11-12 12:49 1109RIA知识库 flex RIA 变量设置 $su - or ...
相关推荐
Oracle 高水位线(High Water Mark,HWM)是 Oracle 段中一个重要的概念,它标志着段中已经使用的数据块的上限。在 Oracle 中,每个段(包括表、索引等)都有一个高水位线,用于记录该段已经使用的数据块的数量。 ...
启用行移动后,当执行`ALTER TABLE SHRINK SPACE`时,Oracle会自动移动行到新的位置,从而重置高水位线。 - **收缩表空间**: ```sql ALTER TABLE table_name SHRINK SPACE; ``` 这条命令用于收缩表空间,即...
内容概要:本文详细介绍了 Oracle 19c 数据库中的高水位线 (High Water Mark, HWM) 概念及其操作。首先解释了 HWM 的定义和特点,随后探讨了 HWM 对全表扫描和插入操作的影响。文中通过具体的 SQL 示例,展示了如何...
在 Oracle 数据的存储中,可以把存储空间想象为一个水库,数据想象为水 库中的水。水库中的水的位置有一条线叫做水位线,在 Oracle 中,这条线被称为`高水位线(High-warter mark, HWM)
Oracle的Freelist(自由列表)和HWM(高水位线)是数据库管理中的关键概念,它们直接影响到数据存储的效率和SQL查询性能。本文将深入解析这两个概念及其原理,并探讨相关的性能优化策略。 首先,Oracle的Freelist是...
Oracle 读取表中所有的行,扫描该表中高水位线(HWM, High Water Mark)以下的所有数据块。随着数据量的增加,高水位线会不断上涨,读取的数据块就会不断增加。在做 Delete 操作的时候,即使把表中的数据都删掉了,...
TRUNCATE不会触发删除触发器,不保留ROLLBACK段,且会重置表的高水位线(HWM),释放表空间。但需要注意的是,TRUNCATE不能用于有外键约束的父表,且一旦执行,数据将无法恢复。 在处理大数据量的表时,TRUNCATE...
10. Oracle数据库高水位线(HWM):文档提到了HWM的概念,这是Oracle数据库中用来指示数据块中数据所占用的最高位置。HWM通常在删除表数据时不会下移,因此合理管理HWM可以避免磁盘空间浪费。 11. Oracle数据库的...
Oracle数据库中的高水位(HWM)概念对于理解为何需要整理表碎片至关重要。高水位是指数据段中已使用过和未使用过的数据块之间的分界线。在高水位以下的数据块曾经被使用过,而以上则是从未被使用或初始化过的空间。...
在执行全表扫描时,Oracle会从表的头部读取数据直至高水位线(HWM),即使表中的数据已被删除也是如此。值得注意的是,`TRUNCATE`操作可以清除表的所有数据,并将HWM重置到表的头部,从而在下一次执行全表扫描时减少...
在全表扫描的情况下,影响性能的关键因素是表的“高水位线”(High Water Mark, HWM)下的空间大小。HWM反映了表中最高数据占用的位置。即使删除了部分数据,HWM也不会自动收缩,导致扫描过程中读取了大量的空闲空间,...
- **高水位线影响**:`TRUNCATE` 会重置表的高水位线 (High Water Mark, HWM),这会影响后续插入数据时的空间分配策略;而 `DELETE` 不会改变 HWM。 #### 2. Oracle常用函数 - **字符串处理函数**: - `LENGTH()`...
- **高水位线(HWM)**:是衡量数据占用空间的一个指标。当数据插入时,HWM会上升,但即使数据被删除,HWM也不会自动下降,这会导致一些空间的浪费。全表扫描操作会读取HWM以下的所有数据块,因此优化HWM管理对提高...
- **TRUNCATE**:这是一个DDL操作,用于清空表中的所有数据,同时会重置高水位线(HWM),无需回滚段参与,速度快。 - **DELETE**:这是一个DML操作,逐行删除表中的记录,需要回滚段参与,速度相对较慢。 #### 八...
`TRUNCATE`作为DDL操作,仅改变数据文件中的高水位线(HWM),不使用回滚段,执行速度快;而`DELETE`作为DML操作,需经过回滚处理,消耗资源更多,执行时间较长。 ### 8. 索引的重要性 索引在Oracle数据库中扮演着...
这是因为`TRUNCATE`会删除表的数据段并重置表的高水位线(High Water Mark, HWM),而不会记录每一行的删除动作到回滚段(因此不支持回滚)。此外,`TRUNCATE`不会触发任何触发器,进一步提高了执行效率。 #### 二、...
- **TRUNCATE**:这是一种DDL操作,其作用仅仅是移动高水位线(High Water Mark, HWM),并清除所有行数据,但不会产生回滚段。因此,TRUNCATE执行速度更快,且不会占用大量的回滚段空间。 - **DELETE**:这是一项...