oracle数据库数据段中的high water mark探究

本文主要说明什么是hwm(高水位标志)?通过实验的方法探究oracle数据库数据段的high water mark 怎样移动及其对数据库性能的影响,并深入研究两种收缩hwm的方法。


high water markHWM)是oracle数据库中关于段的一个重要的概念,表示段中使用过的空间和未使用过的空间的分界线。当请求新的数据块时,如果空闲列表中的块不能满足要求时,hwm指向的块标记为已使用,然后hwm向后移动,指向下一个未使用过的块。

oracle数据库中,block是数据存储的最小单位,段(segment)是由多个块组成,block的状态分为已使用和未使用两种,一般来说,在hwm之下的block都是存储过数据的。下图是关于段的描述:

header

Block

datarow

Block High water mark

Segmentblock的分布

从上图可以看到,一个segmentblock的分布情况。在hwm左边的block是已经使用过的,可以存储数据。在hwm右边的block不能存储数据。当hwm左边的block使用完以后,要存储新的数据时,oracle向右移动hwm,在freelist中增加可用的块。

Oracle段中块的管理有两种方式,一种是freelist,主要在oracle8i之前使用,由于freelist管理的段,对于并发度高的数据段,会造成数据段头的竞争,严重影响数据库的性能。在oracle9i以后,oracle提出auto segment space management(assm)即自动段空间管理,并逐步取代freelist管理方式。Assm使用bitmap的管理方式。

本文以实验为基础,讨论hwm在数据段中的移动情况,及其对数据库性能的影响。

1对于初始创建的tablehwm讨论

刚建好table时,表中没有数据。

1.1先探究freelist管理的数据段

构建实验环境,首先建立一个表空间flm,段管理为freelist

create tablespace flm

datafile 'D:ORACLEPRODUCT10.2.0ORADATATSflm.dbf'

size 20m

extent management local

segment space management manual;

在该表空间上建数据表flm_hwm

SQL> create table flm_hwm(a number,b number)

tablespace FLM

storage(minextents 2)

pctfree 40

pctused 20;

通过以下查询可知为FLM_HWM最初分配的extents

SQL> select count(*) from dba_extents

2 where segment_name='FLM_HWM';

COUNT(*)

----------

2

sqlplus中执行show_space过程,可以看到FLM_HWMblock的使用情况:

SQL> set serveroutput on

SQL> execute show_space('FLM_HWM','SYS');

Free Blocks.............................0

Total Blocks............................256

Total Bytes.............................2097152

Unused Blocks...........................255

Unused Bytes............................2088960

Last Used Ext FileId....................12

Last Used Ext BlockId...................9

Last Used Block.........................1

从以上输出可以看到,有255个未使用的块,表中的第一个块用作数据段头(header block),此时,hwm位于第二个块上。

另外,还可以使用转储(DUMP)段头数据块的方法看到hwm的位置:

先使用以下查询获知FLM_HWM的位置:

SQL> select EXTENT_ID,FILE_ID,BLOCK_ID,RELATIVE_FNO

from dba_extents

where SEGMENT_NAME='FLM_HWM';

EXTENT_ID FILE_ID BLOCK_ID RELATIVE_FNO

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

0 12 9 12

1 12 137 12

从以上查询可以得知表FLM_HWM位于文件file 129块处。其中block 9Header blockDump该块:

SQL> alter system dump datafile 12 block 9;

转储内容保存在该会话的跟踪文件中,摘取其中的有关内容:

Start dump data blocks tsn: 14 file#: 12 minblk 9 maxblk 9

buffer tsn: 14 rdba: 0x03000009 (12/9)

scn: 0x0000.06dcda62 seq: 0x01 flg: 0x04 tail: 0xda621001

frmt: 0x02 chkval: 0x2fa0 type: 0x10=DATA SEGMENT HEADER - UNLIMITED

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x078F2200 to 0x078F4200

78F2200 0000A210 03000009 06DCDA62 04010000 [........b.......]

78F2210 00002FA0 00000000 00000000 00000000 [./..............]

78F2220 00000000 00000002 000000FF 00001020 [............ ...]

78F2230 00000000 00000000 0000007F 0300000A [................]

78F2240 00000000 00000000 00000000 00000000 [................]

78F2250 00000000 00000000 00000000 00000002 [................]

78F2260 00000000 0000CFB2 40000000 0300000A [...........@....]

78F2270 0000007F 03000089 00000080 00000000 [................]

78F2280 00000000 00000000 00000000 00000000 [................]

Repeat 250 times

78F3230 00000000 00010000 00010001 00000000 [................]

78F3240 00000000 00000000 00000000 00000000 [................]

Repeat 250 times

78F41F0 00000000 00000000 00000000 DA621001 [..............b.]

Extent Control Header

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

Extent Header:: spare1: 0 spare2: 0 #extents: 2 #blocks: 255 last map 0x00000000 #maps: 0 offset: 4128

Highwater:: 0x0300000a ext#: 0 blk#: 0 ext size: 127

#blocks in seg. hdr's freelists: 0

#blocks below: 0

mapblk 0x00000000 offset: 0

Unlocked

Map Header:: next 0x00000000 #extents: 2 obj#: 53170 flag: 0x40000000

Extent Map

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

0x0300000a length: 127

0x03000089 length: 128

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

转载于:http://blog.itpub.net/9599/viewspace-472883/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值