楼主: biti_rainy

关于回滚段使用的一点讨论

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
21#
发表于 2002-4-27 08:53 | 只看该作者

Re: 噢2

最初由 biti_rainy 发布
[B]

按照上面观点,似乎与parrotao的意见不一致,如果第一个extent 有活动事务,那么就会从尾部扩展一个extent,那如果头指针与尾指针之间(假设这时尾指针就是第一个extent)有不少空闲空间,则无法使用了。

1:假设共10个extent并编号,尾指针在5号位置,头在10号位置,但7、8号extent已经空闲,这时新的事务来的时候头向1号移动,依次到4号,这个时候5仍然没有释放,那这个时候:

这时:头指针越过5号而利用7、8号直到没有空间在10号和1号间扩展extents?还是不用7、8号而直接扩展新空间……


2:假设共10个extent并编号,尾指针在1号位置,头在10号位置,但7、8号extent已经空闲,这时新的事务来的时候由于第一个extent有事务:

这时:回滚段扩展,指针依次指向11、12、13、14号(在10和1之间)?还是先依次移动到7、8号利用完毕如果不够再移动,然后扩展11号? [/B]



2. Oracle will check 1 ,2 ,3, 4, 5, 6 and find 7 is available and use it.

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
22#
发表于 2002-4-27 08:58 | 只看该作者
Where do you find the definition of 头指针 and 尾指针?

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
23#
发表于 2002-4-27 11:13 | 只看该作者
其实我觉得这个问题不是太复杂,有三条规则可循,请指正。

1. All extents in one rollback segment form a ring. Each one has a number.
2. For a new transaction, it will search from the first one to the last one.
If an avaliable extent is found, it will use it.
If not found, it will extend a new one.
3. For a running transaction, if the current extent is full, it will look at the next extent (if the current one is the last in the ring, the next extent will be the first one.). If the next one is available, it will use it. Otherwise, it will allocate a new one.

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
24#
发表于 2002-4-28 09:12 | 只看该作者

Re: 请翻译这句话,并理解为什么会这么做

最初由 biti_rainy 发布
[B]3. For a running transaction, if the current extent is full, it will look at the next extent (if the current one is the last in the ring, the next extent will be the first one.). If the next one is available, it will use it. Otherwise, it will allocate a new one.

对于一个正运行的事务,如果当前区间满了,踏将寻找下一个(如果当前区间是回滚段形成的环的物理段尾,则下一个区间就是物理段头)。如果下一个区间可用,就使用该区间,否则,它就重新扩展分配一个新的区间。

我认为最后一句是关键。对于oracle来说,allocate a new one我认为是扩展而不是继续往下查找空闲空间。

如果是继续往下找,应该类似表达为  look for the next one

更重要的,如果是继续往下找,真的是一点好处都没有,oracle为何不把空闲区间直接挂在freelist列表中和数据文件一样的处理,这样环状结构一点好处都没有反而多了循环查找的过程,oracle的开发者不至于这么“傻”的,一定有他的理由。我以为理由就是这样可以避免碎片和保证事务数据的连续存储 [/B]


biti_rainy,

我同意你的看法。这三段话是我自己总结的,我的英文不太好 (中文输入我只会全拼,太慢了),但是你现在所说的确实是我要表达的意思。

使用道具 举报

回复
论坛徽章:
2
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
25#
发表于 2002-4-27 15:57 | 只看该作者
我觉得1会出现的。
我们来仔细分析OCP教材里的这两句就可以看出
3 When Extent 3 is full, the transactions write to the next extent in the ring, which is
Extent 4. When transactions start writing to a new extent as in this step, it is called
a wrap.
4 When the last extent for the rollback segment (Extent 4) is full, the transactions
can use the first in the ring (Extent 1) if it is free or inactive. An extent is only free
or inactive if there are currently no active transactions using the extent—that is, all
transactions that wrote to the extent have completed.
只不过Oracle的SMON应该会自动收回大于optimal的未用空间

使用道具 举报

回复
论坛徽章:
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
26#
 楼主| 发表于 2002-4-26 20:36 | 只看该作者

现在不是谈做法或者应对某种现象的问题,呵呵

如果有了深刻的认识
那么,对今后处理各种情况你将会得心应手

对于

Q1 : 用7、8号而直接扩展新空间…… ? 用7、8又直接扩展???


Q2 : 次移动到7,8号


偶想追根求源一下:
oracle为什么会采取这种环状策略
如果它会使用7、8号
偶觉得这种环状策略一点意义都没有了
还不如采取和数据文件一样的策略,利用freelist就可以了
我没有见文档描述上面我说的情况
包括ocp的书,都是描述段的第一个extents有没有活动事务而没有明确的讲环中间的空闲extents会不会利用

所以我一直猜测oracle采取这种策略的根本用意
我觉得它不应该使用7、8,而应该扩展
这样的好处就是保证事务的记录信息连续而不离散
避免碎片过多

因为如果是循环的找空闲块直到满了后再扩展,就没有必要这么做了
简直是浪费循环的时间,还不如采取freelist策略
freelist比这样快,但碎片程度是一样的

所以当偶读到这部分的时候就想oracle的本意
我认为是避免碎片,保障同一事务信息分布的连续
否则在回滚段这么资源竞争激烈的空间中,将可能有灾难性后果

使用道具 举报

回复
论坛徽章:
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
27#
 楼主| 发表于 2002-4-26 13:36 | 只看该作者

认为1不存在的朋友可否继续深究

能说出理由来?

不管是中文还是英文资料
都没有明显的说明关于回滚段的使用,头指针和尾指针的空闲空间可以使用
但要注意一点提示:
回滚段的使用必须有序的进行,头指针只能向前移动

其实对于滚段,相当于一个单向循环链表而已
当扩展的时候,扩展extents必然插在段的头和尾之间
(而不是头指针和尾指针之间,但这时头指针其实必然已经移动到扩展块起始位置)
回滚段的空间组织和利用方式和数据文件不一样,不是使用freelist

另:一个extents当然可以存在多个事务信息
一个block似乎都可以存在多个事务的信息,我现在不确信,得去查一查才知道

关于事务,在extents中记录的是数据信息(含rowid)
事务本身信息是在回滚段头的事物表信息中记录的,呵呵
我想可能部分朋友有些误解

使用道具 举报

回复
论坛徽章:
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
28#
 楼主| 发表于 2002-4-26 08:38 | 只看该作者

关于回滚段使用的一点讨论

根据回滚段选择算法:

假如存在这么一种情况
1:
一个用户插入一条记录使用了某回滚段的尾(是初始extents)
但用户长时间没有提交或者回滚,但用户连接还在线。这其中有不少事务已经提交,因此造成回滚段头指针和尾指针间有大量空闲空间而无法利用,此时是不是比较危险,或者oracle可否有解决机制?

2:由于设置了optimal参数,回滚段扩展到了很大,假设是区间n,而区间n-1由于同上一类问题久久没有释放,但n-2以下空间早已释放,这是又怎样,很麻烦?

2种情况出现的概率多大?
分别在何种情况下容易出现(假设1不允许自动扩展)
大家探讨探讨?

呵呵
2出现的概率太小太小,除非是所有回滚段都被大事务占用且都扩展,新的小事务出现,而大事务都提交了但小事务一直没有完成。这已经是DBA严重失职了……

使用道具 举报

回复
论坛徽章:
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
29#
 楼主| 发表于 2002-4-26 13:48 | 只看该作者

对于insert类型处理

回滚段只记录了rowid而没有记录数据信息
回滚的时候只是执行delete操作

回parrotao,确实是个圈圈,呵呵

是个怪圈
关于恢复的时候出错最麻烦的一个怪圈

环状结构,原始头和尾之间可扩展新区间
但扩展区间收缩到optimal的时候
实在很难提前估计收缩完毕时间(关系到大查询的读一致性问题)
似乎只能通过大量测试来决定比较复杂的回滚段使用类型应用

使用道具 举报

回复
论坛徽章:
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
30#
 楼主| 发表于 2002-4-26 16:59 | 只看该作者

最初由 parrotao 发布
[B]1肯定存在,并会造成Rollback的extend .
不过我认为不会经常发生
只有在头和尾的session都不正常时候才会出现

只要有一个session正常就没有关系因为是个圈圈 [/B]


偶有一点不太确定的意见:
如果这个论点成立的话
则头指针虽然不能覆盖尾指针
但头指针可以越过尾指针?
从而利用头尾指针之间的空闲空间?是么,偶只是进行各种猜测但没有证据。

当所有空间都满了后才会自动扩展(如果允许的话?)

使用道具 举报

回复

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

本版积分规则 发表回复

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