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

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 youbo2004 的 blog

现在作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所重用

l         t1 commit后被其它需要空闲块的事务重用,过程举例如下:

本文关键:Oracle Freelist和HWM原理探讨及相关性能优化
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top