楼主: jiangzx

[精华] db2回滚处理问题

[复制链接]
论坛徽章:
0
91#
发表于 2004-12-24 16:21 | 只看该作者
那我们来看一看同样这三个实验在DB2中会有什么结果(将DB2命令行处理器的自动提交设为否)
DB2SET DB2OPTIONS=-c-
同样有表TEST(ID NUM(10,0))
有50000条记录,值是从1到50000

第一个大SELECT,小UPDATE
A会话----Select * from test;设执行时间09:10:11
B会话-----Update test set id=99999 where id=50000----设执行时间09:10:12
我的实验结果是B会话先完成,如果B会话不COMMIT,那么A的会话将永远不会结束,在显示到47767时停止运行,我想是由于B会话锁定了ID=50000所在页的原因,使得A会话无法锁定页而进入等待状态,(ORACLE不存在这个问题,它是从回滚段中读取的,以上已有详细说明)。正是由于DB2没有回滚段来提供一致性读视图而影响了DB2的并发,难道不是吗?如果一个用户一个月不COMMIT,那么所有SELECT这张表的用户都要等待,这也叫好的并发吗?
如果B会话在A会话读到最后一页之前COMMIT,则A会话可以完成,但是所显示的最后一个值是99999(与ORACLE不同,ORACLE仍然显示的是50000),从这里我们可以说DB2的读稳定性隔离级没有提供事务的高度隔离,(ORACLE可以真正提供基于一个时间点的状态值,而不受其它的影响)。DB2正是没有回滚段来提供一致性读才使用可重复读隔离级来阻止幻像读.

二、大UPDATE,小SELECT
A会话----Update test set id=1;----设执行时间09:10:11
B会话-----select * from test where id=50000----设执行时间09:10:12
我们会发现B会话会永远也不会完成,除非A会话COMMIT,如果A会话忘了COMMIT,B会话的活还干不干了,这是不是影响并发?

三、大UPDATE,小UPDATE
第三个实验做不下去了,因为跟第二个同样的原因,A会话在COMMIT或ROLLBACK之前,B会话只有等

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主1段
日期:2012-05-15 15:24:11管理团队成员
日期:2013-05-02 11:19:53马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:13:20
92#
发表于 2004-12-27 18:28 | 只看该作者
呵呵,开始讨论并发性了。。。公说公有理,婆说婆有理
我倒觉得Oracle没有提供读一致性,看你读一致性的时间点从哪里算起。。。

使用道具 举报

回复
论坛徽章:
78
ITPUB15周年纪念
日期:2020-08-28 17:23:53双鱼座
日期:2016-03-19 19:38:31秀才
日期:2016-02-18 09:31:52秀才
日期:2016-01-25 15:02:04双子座
日期:2016-01-19 20:35:54秀才
日期:2016-01-13 12:14:26秀才
日期:2015-12-25 15:31:10秀才
日期:2015-12-18 09:28:57秀才
日期:2015-12-14 14:56:09秀才
日期:2015-12-14 14:51:16
93#
发表于 2004-12-27 20:21 | 只看该作者
说实在的。ORCLE的所谓“读一致性”到是在24小时不停的OLTP系统出报表挺有用,呵呵,当然前提是你的RBS或者UNDO TABLE SPACE够大。

使用道具 举报

回复
论坛徽章:
0
94#
发表于 2005-3-24 22:45 | 只看该作者
最初由 cliser 发布
[B]第一点:楼上的sql语句在实际中没有意义。谁用*和全表扫描?这样的设计是不规范的。
第二点:db2和oracle的锁定级别不一样,在缺省情况下,db2的锁定级别比oracle高,oracle可以看到别人正在修改而没有提交“之前”的数据,db2无法看到正在被修改而没有提交的数据。在实际生产环境中对于修改的数据,基本是改变的。比如储户查存款余额(一个数据中心)。在oracle环境下,储户要查自己的存款,朋友正好在异地好给这个人存款,储户这时看到存款没有到,而实际上朋友正在存,储户就获得了虚假的信息,除非他再查询下,而db2环境下,储户查询时就在等待异地的机器提交,估计要几秒后就会返回朋友的存款金额,如果异地的机器超过30秒没有提交(假设设定30秒超时),此时就无法返回余额,只能再查,虽然有可能要等待或再查一遍,这样储户得到的是真实的信息。oracle得到的却是虚假的信息,为了避免这种情况的出现,oracle就要在程序上做些限制,所以db2在银行等关键部门中的应用还是比较广泛的。
. [/B]


“第一点”把测试sql非和“全表扫描”套上属于断章取义,既是测试,当然要拿可以清晰反映问题的用例来做了。只要是大数据量操作就存在xyf_tck提到的这些问题。

“第二点”如果是基于银行的实际业务来说明问题,储户在取钱时,真如cliser所述恰有人给其存钱,并发情况的处理,也并不是让储户等待,以看到所谓的真实信息就是好的处理方式。这可能还是需要银行自己来决定,是让储户尽快看到余额以取走钱还是让他等着。如m505所说:公说公有理,婆说婆有理

使用道具 举报

回复
论坛徽章:
233
天枰座
日期:2016-02-02 09:36:332012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41灰彻蛋
日期:2011-06-22 19:28:30现任管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-04-08 16:56:552011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:15
95#
发表于 2005-3-25 11:02 | 只看该作者
最初由 m505 发布
[B]什么是nodes同步? [/B]


这个是oracle里的

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:332011新春纪念徽章
日期:2011-02-18 11:43:33
96#
发表于 2005-3-25 22:18 | 只看该作者
最初由 sickhead 发布
[B]

“第一点”把测试sql非和“全表扫描”套上属于断章取义,既是测试,当然要拿可以清晰反映问题的用例来做了。只要是大数据量操作就存在xyf_tck提到的这些问题。

“第二点”如果是基于银行的实际业务来说明问题,储户在取钱时,真如cliser所述恰有人给其存钱,并发情况的处理,也并不是让储户等待,以看到所谓的真实信息就是好的处理方式。这可能还是需要银行自己来决定,是让储户尽快看到余额以取走钱还是让他等着。如m505所说:公说公有理,婆说婆有理 [/B]


    关于"第二点",oracle在9i或10g中(当然也可能再早的版本),在select等语句中加个选项,达到看不到正在修改的数据.oracle的高手可以给个具体的语法.

使用道具 举报

回复
论坛徽章:
0
97#
发表于 2005-4-6 16:16 | 只看该作者
如果用行锁的话,并发性都不错。在Sybase上也如此。DB2不熟,估计差不多。所以,即使没有回滚段,查询单条数据时(如银行存取款)也没什么问题。但是大批量数据的查询与修改(如电信出账与营收)可能还是Oracle好些。

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主1段
日期:2012-05-15 15:24:11管理团队成员
日期:2013-05-02 11:19:53马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:13:20
98#
发表于 2005-4-6 17:15 | 只看该作者
呵呵,顶

使用道具 举报

回复
论坛徽章:
0
99#
发表于 2005-5-28 10:45 | 只看该作者
最初由 m505 发布
[B]呵呵,顶 [/B]


顶··

其实问题的本质我看是这样,oracle在较低隔离级别(UR)情况下还能具有一些高隔离级别的特性(前滚、后滚),而且还可以提高并发,在DB2中要不就高一致低并发,要不就是低一致高并发。

实际上这就是编程和DBA之间的权衡了。

不管怎么说,各位的言论还是基本上耐听的,收获颇多

使用道具 举报

回复
论坛徽章:
2
ERP板块每日发贴之星
日期:2005-06-03 01:01:36授权会员
日期:2005-10-30 17:05:33
100#
发表于 2005-6-3 09:49 | 只看该作者
支持一下!

使用道具 举报

回复

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

本版积分规则 发表回复

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