ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 高水标记的研究(2)

高水标记的研究(2)

原创 Linux操作系统 作者:ylw66 时间:2009-09-08 15:12:15 0 删除 编辑

本文重点关注在insert时高水标记的变化规律

 

构造一个表,每插入一条记录就增加一块

SQL>  create table test(x int,y varchar2(1200),z varchar2(1200))

  2  pctfree 70,pctused 20;

表已创建。

 

每插入一条记录,dump一次段头的块

SQL> insert into test values(1,lpad('a',1200),lpad('a',1200));

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system dump datafile 15 block 9;

系统已更改。

 

连续以上操作17次,插入17条记录。可以看出每行记录占用了1 block

SQL> @table_blocks;

输入 table 的值:  test

原值    4:  from &table) group by f,b

新值    4:  from test) group by f,b

         F          B   COUNT(*)

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

        15         10          1

        15         11          1

        15         12          1

        15         13          1

        15         14          1

        15         15          1

        15         16          1

        15         17          1

        15         18          1

        15         19          1

        15         20          1

        15         21          1

        15         22          1

        15         23          1

        15         24          1

        15         25          1

        15         26          1

已选择17行。

 

 

在dump文件中搜索Highwater,显示了每次dump的高水标记信息

      Highwater::  0x03c0000b  ext#: 0      blk#: 1      ext size: 7    

      Highwater::  0x03c0000c  ext#: 0      blk#: 2      ext size: 7    

      Highwater::  0x03c0000d  ext#: 0      blk#: 3      ext size: 7    

      Highwater::  0x03c0000e  ext#: 0      blk#: 4      ext size: 7    

      Highwater::  0x03c0000f  ext#: 0      blk#: 5      ext size: 7    

      Highwater::  0x03c00011  ext#: 0      blk#: 7      ext size: 7    

      Highwater::  0x03c00011  ext#: 0      blk#: 7      ext size: 7    

      Highwater::  0x03c00016  ext#: 1      blk#: 5      ext size: 8    

      Highwater::  0x03c00016  ext#: 1      blk#: 5      ext size: 8    

      Highwater::  0x03c00016  ext#: 1      blk#: 5      ext size: 8    

      Highwater::  0x03c00016  ext#: 1      blk#: 5      ext size: 8    

      Highwater::  0x03c00016  ext#: 1      blk#: 5      ext size: 8    

      Highwater::  0x03c00019  ext#: 1      blk#: 8      ext size: 8    

      Highwater::  0x03c00019  ext#: 1      blk#: 8      ext size: 8    

      Highwater::  0x03c00019  ext#: 1      blk#: 8      ext size: 8    

      Highwater::  0x03c0001e  ext#: 2      blk#: 5      ext size: 8    

      Highwater::  0x03c0001e  ext#: 2      blk#: 5      ext size: 8    


把地址转下,高水标记的变化如下:

看上去非常没有规律

我做了以下的猜想:

1 concept上说过,extent最少要保证有5块,所以前5块被分配时,高水标记记录当前data block的next block。

2

SQL>   select t.tablespace_name,t.allocation_type from dba_tablespaces t where t

.tablespace_name='YANG';

TABLESPACE_NAME                ALLOCATIO

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

YANG                           SYSTEM

 

SQL>  select t.blocks from dba_extents t where t.owner='YANG' and t.segment_name

='TEST';

    BLOCKS

----------

         8

         8

         8

该表的表空间的allocation_type为System自动分配,造成刚开始时1extent = 8block

所以分配第6个block时,如果高水标记增加5个block将会超过当前extent的last block,所以高水标记记录当前extent的最后一个block的next block。

3 第一个extent上的block使用完,需要分配下一个extent时,高水标记记录增加了5个block

4 开始分配22块时,高水标记记录当前extent(第二个extent)的最后一个block的next block

5 第二个extent上的block使用完,分配第三个extent,高水标记记录增加5个block

 

使用uniform的extent来验证以上的猜想

创建一个uniform. size 112k的表空间,112k=14 block

CREATE TABLESPACE "YANG2"

    LOGGING

    DATAFILE 'D:\ORACLE\ORADATA\GAME\YANG2.ORA' SIZE 5M REUSE

    EXTENT MANAGEMENT LOCAL UNIFORM. SIZE 112K SEGMENT SPACE

MANAGEMENT  MANUAL

 

SQL> CREATE TABLE "YANG"."TEST2" ("X" NUMBER(10) NOT NULL, "Y"

  2      VARCHAR2(1200) NOT NULL, "Z" VARCHAR2(1200) NOT NULL)

  3      TABLESPACE "YANG2" PCTFREE 70 PCTUSED 20 ;

表已创建。

SQL> insert into test2 values(1,lpad('a',1200),lpad('a',1200));

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system dump datafile 16 block 9;

系统已更改。

 

连续操作插入14条记录

在dump文件中搜索Highwater,显示了每次dump的高水标记信息

      Highwater::  0x0400000b  ext#: 0      blk#: 1      ext size: 13   

      Highwater::  0x0400000c  ext#: 0      blk#: 2      ext size: 13   

      Highwater::  0x0400000d  ext#: 0      blk#: 3      ext size: 13   

      Highwater::  0x0400000e  ext#: 0      blk#: 4      ext size: 13   

      Highwater::  0x0400000f  ext#: 0      blk#: 5      ext size: 13   

      Highwater::  0x04000014  ext#: 0      blk#: 10     ext size: 13   

      Highwater::  0x04000014  ext#: 0      blk#: 10     ext size: 13   

      Highwater::  0x04000014  ext#: 0      blk#: 10     ext size: 13   

      Highwater::  0x04000014  ext#: 0      blk#: 10     ext size: 13   

      Highwater::  0x04000014  ext#: 0      blk#: 10     ext size: 13   

      Highwater::  0x04000017  ext#: 0      blk#: 13     ext size: 13   

      Highwater::  0x04000017  ext#: 0      blk#: 13     ext size: 13   

      Highwater::  0x04000017  ext#: 0      blk#: 13     ext size: 13   

      Highwater::  0x0400001c  ext#: 1      blk#: 5      ext size: 14   


注意从0x0400000f变化到0x04000014,高水标记增加5个block并没有超过当前extent(14个block)的last block,所以高水标记记录  0x04000014。

从0x04000014变化到0x04000017,高水标记增加5个block超过了当前extent (14个block)的last block,

所以高水标记记录0x04000017  

终于明白了高水标记是如何变化的,但这些变化都是在手动段空间管理中


1.JPG

2.JPG

3.JPG

4.JPG

5.JPG

6.JPG

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

下一篇: extent bitmap(1)
请登录后发表评论 登录
全部评论

注册时间:2009-07-29

  • 博文量
    57
  • 访问量
    107663