ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 学习bq_wang的《关于Oracle的高水平线》

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

原创 Linux操作系统 作者:onlinedog 时间:2009-04-23 19:33:35 0 删除 编辑
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 extent为64k,包含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 mark,HWM)并没有复位只是那些空间不再使用而已,再次查询依然会读取HWH以前的块查找是否有可用的数据。而截断表将复位HWH,告诉这些空间没有保存数据。

其他引申出来的问题:

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

通过google找到的介绍:

先分配16个64K的extent,

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

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

80-199 extents每个大小是8M合计大小960M --以上三项大小合计1024M=1G

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

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

下一篇: 过事儿
请登录后发表评论 登录
全部评论

注册时间:2008-09-16

  • 博文量
    106
  • 访问量
    228389