MFL, PFL ,TFL

MFL, PFL ,TFL

master free list或者segment free list简称为MFL,在segment被创建的时候自动生成的,如果我们在创建segment时没有指定freelists参数,或者指定freelists=1,都是生成这个MFLMFL对于每个segment来说有且只有一个。如果指定freelists>1,产生的就不是MFL,而是PFL process free list)。无论是不是有PFL,对于每个segment来说都仍然存在1MFL。也就是如果我们定义freelists等于2的话,那么在segment header block中将总共存在3freelist,其中1个是MFL,另外2个是PFL。这个级别的free list中的空闲块只能被一个进程读取。想象一下,如果当前系统对于某张表最多同时会有10个进程同时作insert操作,那么我们设置freelists=10,将能尽量满足每个进程都能够使用专属于自己的free list,无疑通过这样的手段我们缓解了free list的争用。一个进程到底会使用哪个PFLoracle内部的算法是:(P % NFL) + 1其中P表示DML操作进程的Process ID,可以从v$process.pid字段中取得。NFL表示freelists存储参数定义的PFL数量。

 

transaction free listOracle中事务(transaction)是一个重要的概念,每次DML操作,事务的开始都是自动的,而我们可以通过commit或者rollback来标志一个事务的结束。一个进程(或者说一个用户会话)有自己的PFL,然后一个进程可能会执行很多的事务,于是又出现了这个级别的free list,这就是transaction free list,简称为TFLTFL是动态产生的,只有当DML语句(比如delete或者update)使block占用量降到pctused参数指定值之下时才会生成TFL,一个TFL只属于一个事务,而一个事务也只会有一个TFL,一个事务没有提交之前,此事务的TFL上的空闲块不会被其它事务使用。但是可以立刻被本事务使用(此时这些空闲块被称为previously freed blocks)。每个segment最少可以有16TFL,同时只要有需求就会动态增加TFL数量,除非达到了segment header block size的限制。当没有空间允许新的事务得到自己的TFL时,这个事务就必须等待其它的事务提交并释放TFL。等待哪个事务的算法是:(P % NFL)其中P表示DML操作进程的Process ID,可以从v$process.pid字段中取得。NFL表示当前的TFL总数量。

 

Super Master Free list或者Segment Master Free list这个级别的free list只有在设置了多个freelist groups时才会出现。当我们设置freelist group>1,就会产生freelist group block,这些block紧跟在segment header block之后,假设我们设置了storage(freelists 4 freelist groups 2),那么该segment的第一个块是segment header block,第23个块则都是freelist group block。首先在segment header block中存在1free list,这个free list就被称为Super Master Free list或者Segment Master Free list。而在每个freelist group block中又都存着1MFL,还存在4PFL,每个freelist group block块的剩余空间则全部留给TFL使用。在单个instance中进程选择freelist group的算法是(P % NFB) + 1 。其中P表示DML操作进程的Process ID,可以从v$process.pid字段中取得。NFB表示freelist groups 参数定义的Freelist Groups数量。

 

对于 freelist freelist group Tom 在《 Effective Oracle by Design 》中有个比喻,非常形象。想象 有一台饮水机和源源不断的急需喝水的人们,一台饮水机就代表一个 free list ,而一个想喝水的人 就是一个准备向 segment 中插入数据的会话。如果我们只有一个饮水机,那么所有想喝水的人都 必须要排成一队,然后前一个喝完了下一个才能喝,这就产生了争用。设想一下我们现在放置了 10 个饮水机,很明显人们可以排到 10 个队伍中的任何一个队伍里,毫无疑问效率大大加快了。这 时瓶颈又出现了,就是如果一个饮水机里的水被喝完了,就得给这个饮水机加水,此时如果只有 一个加水员(这就是一个 freelist group ),那么加水的速度可能就会跟不上了,添加 freelist group 就是增加加水员,增加到 2 个,每个人负责 5 个饮水机(体现在参数上,是 freelists 5 freelist groups 2 ), OK ,效率又提升了。

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

转载于:http://blog.itpub.net/8797129/viewspace-691979/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值