This Domain(Admin5.com) is for Sale:

Oracle Freelist和HWM原理探讨及相关性能优化

时间:2007-12-23  来源:不详  作者:迈克DB

例如:考虑段中有120个块编号由1到120。其中有6个块在freelist上并假设HWM是80。(block实际使用DBA编号)
10->24->45->46->65->80-|
现在作INSERT操作,需要400bytes空间。假设块10上空间不足,但块24上空间可用。现在数据插入到块24,现在块24的剩余空间小于该表的PCTUSED。因此块24从freelist链表中移出。PCTFREEandPCTUSED参数的目的就是用来控制数据块从freelist的链表中移入/移出行为的。现在freelists象这样:
10->45->46->65->80-|
然后在同一事务中作DELETE同一个段的数据,使块54和67落到PCTUSED下。现在这些块加入到freelist链中。freelist链现在象这样:
67->54->10->45->46->65->80-|
2.4.2TransactionFreeList算法
扫描segmentHeader块中所有的Txfreelist,检查是否还没有Txfreelistentry分配给transaction,如何没有,将寻找未使用的entry或已经提交了事务的空的Txfreelist。假如上述搜索过程失败,新的entry会在segmentHeader块中Txfreelists区域中开辟。假如没有空间来生成,事务就必须等待entry的释放。
segmentheader中的最大freelist个数:
BlockSizeMax#Freelists
---------------------------- 织梦好,好织梦
2K24
4K50
8K101
16k204
事务T1释放出来的空闲块(DELETEorUPDATE)的使用:
l立即被T1所重用
l当T1commit后被其它需要空闲块的事务重用,过程举例如下:


2.5HMW概念
HIGHWATERMARK代表一个表使用的最大的(toplimit)块。2.1中已经提到HIGHWATERMARK记录在segmentheader中,并且在Oracle插入数据时一般增长5个blocks(并非总是5个块,具体参见2.4.2中流程图中HMW增长方式)。
segmentheaderblock中与HWM相关信息说明如下:
EXTENTCONTROL:
ExtentHeader::spare1:0space2:0#extents:13#blocks:1429
lastmap0x00000000#maps:0offset:4128
Highwater::0x020004d0ext#:12blk#:275extsize:475
#blocksinseg.hdr’sfreelists:5
#blocksbelow:1229
mapblk0x00000000offset:12
Unlocked
==>spare1:thisfieldisnolongerused(oldinc#,nowalways0)
==>space2:thisfieldisnolongerused(oldts#,nowalways0)
==>#extents:numberofextentsallocatedtosegment
==>#blocks:numberofblocksallocatedtosegment

==>lastmap:addressoflastextentmapblock
0ifextentmapisentirelyinthesegmentheader
织梦好,好织梦

==>#maps:numberofextentmapblock
==>offset:offsettoendofextentmap

==>HWMdba:addressofblockathighwatermark
==>ext#:HWMextentnumberrelativetosegment
==>blk#:HWMblocknumberwithinextent
==>extsize:HWMextentsize(inblocks)
==>#blocksinseg.hdr’sfreelists:numberofblocksinseg.hdr’sfreelist
==>#blocksbelow:numberofblocksbelowHWM
==>mapblkdba:dbaofextentmapblockcontainingHWMextent
is0ifHWMisinthesegmentheader
==>offset:offsetwithinextentmapblock
istheext#ifHWMisinsegmentheader
==>Lockedby:iflockedbyatransaction,thexidisdisplayed

HWM可以说是已经使用过的存储空间和未使用过的存储空间之间的分界线。在表使用过程中,HWM一直向一个方向移动,插入记录时HWM可能会向增加的方向移动,但是删除记录时HWM并不会向相反的方向移动。参见2.4.2。下图显示了某个数据段中HWM的位置情况。
本文来自织梦

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息