学习bq_wang的《关于Oracle的高水平线》

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

--  第一步:Create table

SQL> create table TEST( A CHAR(1024));

--   第二步:查看段存储信息(对象是以段为分配单位)

SQL> select * from user_extents where segment_name = 'TEST';

SEGMENT_NAME  PARTITION_NAME  SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID   BYTES     BLOCKS
------------               ---------------- -          -----------              ---------------              ---------- -        --------- ----------
TEST                                                      TABLE                 P_HDTEST                  0                   65536       8

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

SQL> select bytes,blocks,initial_extent,next_extent,min_extents,max_extents from user_segments where segment_name = 'TEST';

BYTES     BLOCKS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
------         ----------  --------------          -----------             -----------            -----------
 65536          8          65536                                             1                       2147483645

-- 第四步:插入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'

 SEGMENT_TYPE       TABLESPACE_NAME                 EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
-------- ------------------ ------------------------------ ---------- ---------- ---------- ---------- ---------- -------
 TABLE              TP_HDTEST                               0          7     835217      65536          8            7
 TABLE              TP_HDTEST                               1          7     835225      65536          8            7
 TABLE              TP_HDTEST                               2          7     835233      65536          8            7
 TABLE              TP_HDTEST                               3          7     835241      65536          8            7
 TABLE              TP_HDTEST                               4          7     835249      65536          8            7
 TABLE              TP_HDTEST                               5          7     835257      65536          8            7
 TABLE              TP_HDTEST                               6          7     835265      65536          8            7
 TABLE              TP_HDTEST                               7          7     835273      65536          8            7
 TABLE              TP_HDTEST                               8          7     835281      65536          8            7
 TABLE              TP_HDTEST                               9          7     835289      65536          8            7
 TABLE              TP_HDTEST                              10          7     835297      65536          8            7

 SEGMENT_TYPE       TABLESPACE_NAME                 EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
-------- ------------------ ------------------------------ ---------- ---------- ---------- ---------- ---------- -------
 TABLE              TP_HDTEST                              11          7     835305      65536          8            7
 TABLE              TP_HDTEST                              12          7     835313      65536          8            7
 TABLE              TP_HDTEST                              13          7     835321      65536          8            7
 TABLE              TP_HDTEST                              14          7     835329      65536          8            7
 TABLE              TP_HDTEST                              15          8     891017      65536          8            8
 TABLE              TP_HDTEST                              16          9     891273    1048576        128            9

-- 第六步:执行delete操作

Delete * from test;

执行后再次查询存储信息,没有发生任何变化。

 SEGMENT_TYPE       TABLESPACE_NAME                 EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
-------- ------------------ ------------------------------ ---------- ---------- ---------- ---------- ---------- -------
 TABLE              TP_HDTEST                               0          7     835217      65536          8            7
 TABLE              TP_HDTEST                               1          7     835225      65536          8            7
 TABLE              TP_HDTEST                               2          7     835233      65536          8            7
 TABLE              TP_HDTEST                               3          7     835241      65536          8            7
 TABLE              TP_HDTEST                               4          7     835249      65536          8            7
 TABLE              TP_HDTEST                               5          7     835257      65536          8            7
 TABLE              TP_HDTEST                               6          7     835265      65536          8            7
 TABLE              TP_HDTEST                               7          7     835273      65536          8            7
 TABLE              TP_HDTEST                               8          7     835281      65536          8            7
 TABLE              TP_HDTEST                               9          7     835289      65536          8            7
 TABLE              TP_HDTEST                              10          7     835297      65536          8            7

 SEGMENT_TYPE       TABLESPACE_NAME                 EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
-------- ------------------ ------------------------------ ---------- ---------- ---------- ---------- ---------- -------
 TABLE              TP_HDTEST                              11          7     835305      65536          8            7
 TABLE              TP_HDTEST                              12          7     835313      65536          8            7
 TABLE              TP_HDTEST                              13          7     835321      65536          8            7
 TABLE              TP_HDTEST                              14          7     835329      65536          8            7
 TABLE              TP_HDTEST                              15          8     891017      65536          8            8
 TABLE              TP_HDTEST                              16          9     891273    1048576        128            9

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

SQL> TRUNCATE TABLE TEST;

表被截断。

 SEGMENT_TYPE       TABLESPACE_NAME                 EXTENT_ID      BYTES     BLOCKS
-------- ------------------ ------------------------------ ---------- ---------- ----------
 TABLE              TP_HDTEST                               0      65536          8

结论:

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

其他引申出来的问题:

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

通过google找到的介绍:

先分配1664Kextent

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

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

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

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

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

转载于:http://blog.itpub.net/7204674/viewspace-591638/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值