关于Oracle的高水平线

本文详细解析Oracle数据库中的高水位线(High Water Mark, HWM)概念,包括其在表空间管理中的作用,以及如何通过不同操作(如DELETE与TRUNCATE)影响HWM的位置。此外还介绍了表空间在不同数据量下的自动分配策略。
摘要由CSDN通过智能技术生成
关于 Oracle 的高水平线

 

high water mark故名思义为高水平线,一般是相对一个表而言的,当一个表有数据不断的插入时,high water mark值不断增高,对那些全表扫描的select查询是以high water mark为终点的,虽然表中可能只有一行记录.它是表的空间曾经扩充到的值

之所以对hwm产生了兴趣还是缘于下午的那个resize事件,呵呵

 

创建一张test

-- Create table

create table TEST

(

  A CHAR(1024)

);

 

select * from dba_extents where segment_name='TEST'

后见图:表创建的时候会按照初始化参数进行创建,默认是Initial extent64k,包含8个数据块。

6517_200901100211361.jpg

 

插入1000条原始记录,1000*1k约等于1M

declare

  -- Local variables here

  i integer;

begin

  -- Test statements here

  for i in 1..1000

  loop

    INSERT INTO TEST VALUES(I);

  end loop;

  COMMIT;

end;

 

select SUM(BYTES) from user_extents where segment_name='TEST' 

select * from dba_extents where segment_name='TEST'

后见图:

6517_200901100211451.jpg

 

执行delete操作

Delete * from test;

执行后的图与上面一样,没有发生任何变化

bb


再执行truncate操作,把该表的高水平线恢复到原有的初始化阶段

TRUNCATE TABLE TEST;

后见图:

bb

 

结论:

数据被删除后,高水平线(high-water markHWM)并没有复位只是那些空间不再使用而已,再次查询依然会读取HWH以前的块查找是否有可用的数据。而截断表将复位HWH,告诉这些空间没有保存数据。

 

其他引申出来的问题:

在插入测试的数据过程中,如果首先插入100条、200条的时候,数据库分配区间是以64k为单位分配的,当插入到1000条时,新分配的区间突然变为1M

我反复查看了该表的storage定义

storage

  (

    initial 64K

    minextents 1

    maxextents unlimited

  );

只是没有next extent的定义而已,又找了很久9i10g的官方文档,发现对next extent的解释还是按照早期版本的说法,定义多少分配多少,百思不得其解。

 

还是通过google找到的介绍:

先分配1664Kextent

0-15 extents 每个大小是64K 合计大小 1M

1679 extents 每个大小是1M 合计大小 63M --以上两项大小合计 64M

80199 extents 每个大小是8M 合计大小 960M --以上三项大小合计 1024M1G

200-?? extents 每个大小是64M

 

具体参考文档,详见:

Oracle10g extent autoallocate分配时,表是如何分配空间

http://space.itpub.net/35489/viewspace-84692

 

Oracle9i tablespace空间分配中initial_extentLMT,DMT

http://space.itpub.net/35489/viewspace-503836

fj.pngCREATE TABLE.JPG

fj.pngINSERT 1000RECORD.JPG

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6517/viewspace-536267/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/6517/viewspace-536267/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值