Oracle的高水位线HWM简介

高水位是记录段里能容纳数据的上限,高水位存在段里

全表扫先读段头块,而后在段头块里面找到HWM

下面用实验由内而外来理解Oracle的HWM

--t表有一条数据

hr@ORCL> select * from t;

ID NAME

---------- ----------

1 AAAAA

--找t段的段头块

hr@ORCL> select header_file,header_block from dba_segments where segment_name='T' and owner='HR';

HEADER_FILE HEADER_BLOCK

----------- ------------

4     387

--另开一个session,dump段头块

sys@ORCL> alter session set tracefile_identifier='sys_dump_t_01';

Session altered.

sys@ORCL> alter system dump datafile 4 block 387;

System altered.

dump的部分trc内容摘入

Extent Control Header

-----------------------------------------------------------------

Extent Header:: spare1: 0   spare2: 0   #extents: 1   #blocks: 8

last map 0x00000000 #maps: 0   offset: 2716

Highwater:: 0x01000189 ext#: 0   blk#: 8   ext size: 8  --Highwater就是高水位,0x01000189这个是HWM的地址

#blocks in seg. hdr's freelists: 0

#blocks below: 5

mapblk 0x00000000 offset: 0

Unlocked

--------------------------------------------------------

Low HighWater Mark :

Highwater:: 0x01000189 ext#: 0   blk#: 8   ext size: 8

#blocks in seg. hdr's freelists: 0

#blocks below: 5

mapblk 0x00000000 offset: 0

Level 1 BMB for High HWM block: 0x01000181

Level 1 BMB for Low HWM block: 0x01000181

--------------------------------------------------------

Segment Type: 1 nl2: 1   blksz: 8192  fbsz: 0

L2 Array start offset: 0x00001434

First Level 3 BMB: 0x00000000

L2 Hint for inserts: 0x01000182

Last Level 1 BMB: 0x01000181

Last Level II BMB: 0x01000182

Last Level III BMB: 0x00000000

Map Header:: next 0x00000000 #extents: 1  obj#: 52713 flag: 0x10000000

Inc # 0

Extent Map

-----------------------------------------------------------------

0x01000181 length: 8

Auxillary Map

--------------------------------------------------------

Extent 0   : L1 dba: 0x01000181 Data dba: 0x01000184

--------------------------------------------------------

Second Level Bitmap block DBAs

--------------------------------------------------------

DBA 1:  0x01000182

d dump data blocks tsn: 4 file#: 4 minblk 387 maxblk 387

时间: 2024-07-30 12:39:56

Oracle的高水位线HWM简介的相关文章

Oracle 降低高水位线的方法

Oracle  降低高水位线的方法  高水位(HIGH WARTER MARK,HWM)好比水库中储水的水位,用于描述数据库中段的扩展方式.高水位对全表扫描方式有着至关重要的影响.当使用DELETE删除表记录时,高水位并不会下降,随之导致的是全表扫描的实际开销并没有任何减少. 例如,首先新建一张空表,大小占用64K,然后插入数据直到表大小变为50G,此时使用DELETE删除所有的数据并且提交,这个时候查询表的大小的时候依然是50G,这就是因为表的高水位没有释放的缘故,而在这时如果使用"SELEC

oracle点知识 ——HWM(高水位线) 上

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

INITIAL参数设置导致TRUNCATE TABLE不能降低高水位线案例

在一个数据库使用下面SQL找出了一批需要降低高水位线的表,其中有几个表没有数据,于是我打算用TRUNCATE来降低高水位线HWM SELECT a.owner,        a.segment_name,        a.segment_type,        a.tablespace_name,        a.blocks              "real block",        a.bytes / 1024 / 1024 "realSizeMB&quo

oracle点知识——HWM(高水位线) 下

1.何时应该降低 HWM table中包含两种空闲的block,在HWM之上的空闲block 和 在HWM之下的空闲block. 1.在HWM之上的空闲block : 运行analyze table后,在HWM之上的空心啊block会在user_tables 的 empty_blocks中 被统计,这些空闲的blocks实际上是从来没有存储过数据的,可以用以下命令来释放这些空间: SQL>  alter table table_name  deallocate unused; 下面做一个实验来验

高水位线和全表扫描

   高水位线好比水库中储水的水位线,用于描述数据库中段的扩展方式.高水位线对全表扫描方式有着至关重要的影响.当使用delete 操作 表记录时,高水位线并不会下降,随之导致的是全表扫描的实际开销并没有任何减少.本文给出高水位线的描述,如何降低高水位线,以及高水 位线对全表扫描的影响.   一.何谓高水位线    如前所述,类似于水库中储水的水位线.只不过在数据库中用于描述段的扩展方式.     可以将数据段或索引段等想象为一个从左到右依次排开的一系列块.当这些块中未填充任何数据时,高水位线位于

高水位线条款:中国基金激励的现实选择

在美国对冲基金中广泛应用的高水位线条款,如果能以适当的方式引入到我国开放式基金中,对促进我国开放式基金的发展或将起到很好的推动作用 文/李曜 史丹丹 在不到十年的时间里,美国的对冲基金从1000家迅速增长到7000家,资产规模在2007年时超过1.5万亿美元.为什么对冲基金如此成功? 西方学术界发现,对冲基金与公募基金的重要区别之一就是高水位线条款(high water marks, 以下简称HWM),这是以美国为代表的西方私募资产管理业,特别是对冲基金业管理费设计的一个关键技术条款.HWM条款

关于降低高水位线的尝试

在前一段时间,生产环境中有几个很大的分区表,由于存在太多的碎片,导致表里的数据就几十条,但是查询的时候特别慢.很明显是高水位线导致的问题. 一般来说这类问题,使用备份->truncate->insert的方式比较保守,不适用于在线操作. 而在10g开始的一个新特性shrink算是一个比较理想的方案,按照新特性的预期,速度也是很快的,而且是在线操作.可以分批释放表中的冗余空间. 所以做了一个尝试,在生产系统中使用这个新特性来降低高水位线. 生产中的表pub_log,sub_log都是分区表,分区

什么是Oracle高水位线

现在解释下什么是"高水位": oracle的逻辑存储结构:表空间-->段-->区--> 块 块:是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就 是说当ORACLE从数据文件读数据时,是读取多少个块,而不是多少行. 区:由一系列相邻的块而组成,这也是ORACLE空间分配的基本单位,举个例子来说,当我们创建一个表A 时,首先ORACLE会分配一区的空间给这个表,随着不断的INSERT数据到A,原来的这个区容不下插入的数据

Oracle中Rollback&Truncate操作对高水位线影响:性能优化

Test 1. 创建一个用户leonarding并授予dba权限 SYS@LEO> create user leonarding identified by leonarding default tablespace users; SYS@LEO> grant dba to leonarding; 2. 创建一个t表,只要结构信息 SYS@LEO> conn leonarding/leonarding LEONARDING@LEO> create table t as select