楼主: 超级野人

关于update运行机制的疑问?

[复制链接]
论坛徽章:
42
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23
11#
发表于 2005-6-28 16:51 | 只看该作者
read需要将内存中的block设置一个null一级的"锁"

使用道具 举报

回复
论坛徽章:
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
12#
发表于 2005-6-28 17:21 | 只看该作者
最初由 超级野人 发布
[B]那我就对它的实现有些疑问:想想看,某一段微小时间中,理论上可以有无数个tranction来read 一个block,那么这样一来,就不可能使用一个简单的标志来区分不同的tranction,而如果不区分这些tranction,就不可能得知是否这些tranction已经完成对该block的read。该怎么解决!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [/B]


这么激动干吗,呵呵

一个进程要去修改一个buffer,先pin这个buffer,成功,标记 buffer 被使用(exclusive),修改数据,完毕修改buffer标记,这样其他进程就可以读这个buffer。 这是一个微秒级以下的过程。

而buffer被哪个进程正在pin住,并不需要关心,更不用关心是哪个进程的哪个事务了。 一个进程只需要知道是否有别的进程在pin住这个buffer就可以了。


至于你想知道哪个事务修改了哪些数据,如何识别这些数据的时间点以及是否需要被读到,这是 一致读  方面的内容,需要通过 block  ITL 以及回滚段等信息去实现。这个资源消耗已经远大于我们这里讲的pin的概念了。

记得你似乎关注过一致读,不知道你还记得相关内容否。

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
13#
 楼主| 发表于 2005-6-28 18:31 | 只看该作者
一个进程只需要知道是否有别的进程在pin住这个buffer就可以了。
我就是问oracle怎么知道是否有别的进程在pin这个buffer,因为可能有很多的tranction同时在read这个buffer,oracle该怎么判断到底哪个tranction在最后时刻read完该buffer,因为不同的tranction不一定read的时间一样吧!oracle肯定要等待最后的tranction完成read之后,才能解除pin,我就是问,oracle该怎么知道什么时候解除该pin!

使用道具 举报

回复
论坛徽章:
53
ITPUB元老
日期:2007-05-26 17:20:07雪佛兰
日期:2013-11-09 14:27:29Jeep
日期:2013-11-11 12:36:42大众
日期:2014-01-07 13:55:32凯迪拉克
日期:2014-01-21 10:40:32兰博基尼
日期:2014-01-21 14:23:55雪佛兰
日期:2014-02-08 08:40:412014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-20 16:11:47
14#
发表于 2005-6-28 19:30 | 只看该作者
最初由 超级野人 发布
[B]那我就对它的实现有些疑问:想想看,某一段微小时间中,理论上可以有无数个tranction来read 一个block,那么这样一来,就不可能使用一个简单的标志来区分不同的tranction,而如果不区分这些tranction,就不可能得知是否这些tranction已经完成对该block的read。该怎么解决!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [/B]

老兄好猛,呵呵

使用道具 举报

回复
论坛徽章:
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
15#
发表于 2005-6-28 19:37 | 只看该作者
最初由 超级野人 发布
[B]一个进程只需要知道是否有别的进程在pin住这个buffer就可以了。
我就是问oracle怎么知道是否有别的进程在pin这个buffer,因为可能有很多的tranction同时在read这个buffer,oracle该怎么判断到底哪个tranction在最后时刻read完该buffer,因为不同的tranction不一定read的时间一样吧!oracle肯定要等待最后的tranction完成read之后,才能解除pin,我就是问,oracle该怎么知道什么时候解除该pin! [/B]



一个进程,pin buffer ---  read data --- free pin   这是一个原子的过程,这是由读取或者修改buffer的进程自己来完成的。

如果你要追究到 9i  的 同时读 的问题,这个,我没去研究过这个结构,也许是一个list。

所以,如果你非要一个完美的答案,那就按照8i的机制给你答复,任意两个进程,连读都是相互排斥的,这样就不存在你所说的一系列问题。

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
16#
 楼主| 发表于 2005-6-29 08:20 | 只看该作者
我再想问一下:在9i中,是不是更改后列长度不发生变化的update进程也和8i一样是直接在原位置进行数据的替换!也就是说,update之后,row的位置是不是没有发生改变!

使用道具 举报

回复
论坛徽章:
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
17#
发表于 2005-6-29 08:35 | 只看该作者
最初由 超级野人 发布
[B]我再想问一下:在9i中,是不是更改后列长度不发生变化的update进程也和8i一样是直接在原位置进行数据的替换!也就是说,update之后,row的位置是不是没有发生改变! [/B]


你都知道怎么去测试这个问题了,为何不亲自一试?

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
18#
 楼主| 发表于 2005-6-29 08:50 | 只看该作者
可惜我这没有9i 呀!!!!!!!!!!!!!!

使用道具 举报

回复
论坛徽章:
42
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23
19#
发表于 2005-6-29 09:16 | 只看该作者
位置是可以变的,只是row index是不变的。

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
9
授权会员
日期:2005-12-23 16:28:18会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44铁扇公主
日期:2007-10-26 16:08:47生肖徽章2007版:鸡
日期:2008-01-02 17:35:532009新春纪念徽章
日期:2009-01-04 14:52:282009日食纪念
日期:2009-07-22 09:30:00祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
20#
发表于 2005-7-1 10:40 | 只看该作者
学习!

使用道具 举报

回复

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

本版积分规则 发表回复

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