楼主: biti_rainy

[精华] 关于 freelist

[复制链接]
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
31#
 楼主| 发表于 2003-6-1 18:14 | 只看该作者

uncommited TFL

是指  本session 还没有提交的临时存在的  TFL(私有的)
PFL 是为 本进程选择的 freelist
然后是 MFL (设置了freelist > 1 则存在一个 MFL)

而 committed  TFLs 是指数据库搜索其他 session  所使用的 TFLs ,如果事务已经提交就可以回收到 MFL ,以便使所有session都可以使用,而达到共享。否则如果是回收到 PFL 则会出现由于delete而导致不同的 freelist 上 block太不平衡,假如删除1000blocks,则全部挂在了某个 PFL,各freelist上就太不均衡了,这时需要放回到 MFL ,使得所有 process都有机会使用

使用道具 举报

回复
论坛徽章:
0
32#
发表于 2003-6-1 18:15 | 只看该作者

UP

自己up一下,希望高手指教,谢谢先!
再longrow给出的叙述中有:
Transaction Free List Algorithms:
The Tx free list allocation process starts by scanning all Tx free lists allocated in the segment Header block and checking if a Tx free list entry has not already been allocated to the transaction. Else, it looks for an unused entry or an empty Tx free list belonging to a "committed" transaction. If the search fails, a new entry in the Tx free lists area is allocated. When there is no chance to expand the Tx Free lists area, the unfortunate transaction has to wait for an entry releas
关键是:
it looks for an unused entry or an empty Tx free list belonging to a "committed" transaction.
而此叙述和我上面贴出的有冲突,我有点迷惑,不太确信!
我上面的一贴,也是有出处:This article appeared in the Sept 1999 issue of Oracle Professional. 它说先Oracle searches the uncommitted TFL first,请细看前面一贴。

谢谢!

使用道具 举报

回复
论坛徽章:
0
33#
发表于 2003-6-1 18:40 | 只看该作者

up

谢谢 biti_rainy,我现在关键两段叙述有差异,可能是我理解不全,可能是他们要表达的内容是一样,而我没有理解。
如果是uncommited TFL ,它应该还是加锁状态,它的space还不能被回收使用,而只有committed了的才能回收(数据块的header的部分才标示为state: committed,它不立刻释放,如果有下一个session用,那么就可以立刻用,而不用先到MFL,然后再分配给This session,当然如果一会儿没有session用,那么MFL可能不久就回收了放其The head of the free block chain)。

当然了,应该是我理解错了,不过我知道我错在那里!

我只是希望,你能给我一个回复,为什么他们的说法有不同? 谁对,谁错? 或都对,但为什么?为什么会殊途同归?

我的理解能力不强,但不是弱智,呵,希望斑竹能耐心点。再次谢过了。

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
34#
 楼主| 发表于 2003-6-1 18:56 | 只看该作者

?

Tx  free list 不过是为了 session 而保留的私有的,如果正在使用(uncommitted) 就不能被别的session使用

如果已经被提交了,则相当于释放了 Tx  freelist ,可以被其他session使用,当然该session也可以继续使用别的tx  freelist

这样就是说 oracle总是尽可能的利用已经存在的 Tx  freelist


如果是搜索空闲空间,是先搜索 uncommit  TFl --->PFL---->MFL(这时可能回收 TFLs 中block进MFL) ----> 移动HWM


it looks for an unused entry or an empty Tx free list belonging to a "committed" transaction.
这不是指 获取 空闲block,而是指为某个session的事务分配 TFL

使用道具 举报

回复
论坛徽章:
0
35#
发表于 2003-6-1 19:24 | 只看该作者

感谢老大,醍醐灌顶阿

再问一个比较弱的问题,千万不要打我耳光阿!
如果是搜索空闲空间,先搜索 uncommit TFl,是不是因为After the commit, this space is then put on the MFL(反正会被回收). 而没有commit的,但有已经分配了它的空间了的,而且数据块中还有free space 还大于PCTFREE这样的块,先收索它uncommit TFl,就是为了充分利用已经分配给了它的数据块,是这样吗?

这次应该没有多了吧,呵!
再次谢谢BT老大,我现在的思路开始清晰了!

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
36#
 楼主| 发表于 2003-6-1 19:35 | 只看该作者

如果事务已经提交

那么该 Tx freelist  已经不属于这个session 了,可能被其他session使用。并且这个时候在一个很短的周期内,里面的block会被回收到 MFL

没有commit而有block在上面的,自然要充分利用!

你的理解基本差不多了
想想这样是否合理呢? 我的认为是  合理!

很多时候发现不合理甚至矛盾的地方,基本是自己理解错了。难以挑出毛病来。偶早认识到: 自己能想到的不合理的设计,除非是因为重大原因无非修改的遗留问题,否则oracle的设计人员不会考虑不到的,人家永远比偶一个人聪明多了

使用道具 举报

回复
论坛徽章:
0
37#
发表于 2003-6-1 19:54 | 只看该作者

谢谢老大鼓励、帮助

祝老大幸福、健康、愉快!
我越来越崇拜你啦,not only your profound knowledge ,but what you have done for us the whole members of ITPUB!.

使用道具 举报

回复
论坛徽章:
19
授权会员
日期:2007-08-25 20:02:41会员2007贡献徽章
日期:2007-09-26 18:42:10BLOG每日发帖之星
日期:2008-11-13 01:01:05
38#
发表于 2008-8-22 22:40 | 只看该作者
freelist和空间没什么关系。。。这点很多人知道。但
现在已经很少有人深入去研究求证,探讨一些比较底层的东东了。。。我也略过。。。

使用道具 举报

回复
论坛徽章:
3
2010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:06:12ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52
39#
发表于 2011-3-1 22:51 | 只看该作者
都是一个进程插入肯定不会有太大差异了。freelist数量和并行有直接关系。

使用道具 举报

回复
论坛徽章:
0
40#
发表于 2011-4-6 17:09 | 只看该作者
Master is master.

Thanks!

Kevin

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表