网站导航:首页 -> Oracle认证 -> Oracle认证行业信息 -> OracleFreelist和HWM原理及性能优化(3)

OracleFreelist和HWM原理及性能优化(3)


2.4 free list行为
2.4.1 freelist link and unlink 操作
freelist 按后进先出队列(lifo) 方式管理。也就是说最后被link到freelist的块拥有最先unlink的机会。当块中空闲空间增加到大于pctfree时,块放入freelist中。free list中的块可用来作update 或insert。 当块中没有足够的空间用于insert操作时并且使用空间大于pctused,块就会从free list中移出。
在块在delete or update 操作之后,如果使用空间落到pctused下,块再次link到free list中。每次块加入free list时,都是link到链表的头部。
例如:考虑段中有120个块编号由1到120。其中有6个块在free list上并假设hwm是 80。(block实际使用dba编号)
10->24->45->46->65->80-|
现在作insert 操作,需要400 bytes空间。假设块10上空间不足,但块24上空间可用。现在数据插入到块 24 ,现在块24的剩余空间小于该表的pctused。因此块 24 从free list链表中移出。pctfree and pctused参数的目的就是用来控制数据块从free list的链表中移入/移出行为的。现在free lists象这样:
10->45->46->65->80-|
然后在同一事务中作delete同一个段的数据,使块 54 和 67落到pctused下。现在这些块加入到free list链中。free list链现在象这样:
67->54->10->45->46->65->80-|
2.4.2 transaction free list 算法
扫描segment header块中所有的tx free list,检查是否还没有tx free list entry分配给transaction, 如何没有,将寻找未使用的entry或已经提交了事务的空的tx free list。如果上述搜索过程失败, 新的entry会在segment header块中tx free lists区域中开辟。如果没有空间来生成, 事务就必须等待entry的释放。
segment header中的最大free list个数:
block size max # freelists
----------- -----------------
2k 24
4k 50
8k 101
16k 204
事务t1释放出来的空闲块(delete or update)的使用 :
l 立即被t1所重用