3/24/2007

Oracle锁与DB2锁的比较

前几天,有个做BOSS的朋友问起这个问题,说DB2的锁机制用起来很不习惯。因为Oracle现在主要在操作型系统中应用比较多,对高并发度上要求很高。据我了解,在国内还没有在电信业务支撑系统上使用DB2数据库的,是不是DB2做不到高并发度呢?
我们就从锁出发,请大家各抒己见,比较一下两者的区别。:)

4 comments:

Xinduo Lin 说...

我来自己顶一下。

其实Oracle和DB2具有意向锁的多粒度封锁机制进行并发控制,保证数据的一致性。
但Oracle强调的是能够"读"到数据,并且能够快速的进行数据读取,读数据(SELECT)不加锁。
而DB2的锁强调的是"读一致性",进行读数据(SELECT)时会根据不同的隔离级别(RR,RS,CS)而分别加S,IS,IS锁,只有在使用UR隔离级别时才不加锁。从而保证不同应用程序和用户读取的数据是一致的。

具体表现为:
在Oracle中当一个session对表进行insert,update,delete时候,另外一个session仍然可以从Orace回滚段或者还原表空间中读取该表的前映象(before image); 而在DB2中当一个session对表进行insert,update,delete时候,另外一个session仍然在读取该表数据时候会处于lock wait状态,除非使用UR隔离级别可以读取第一个session的未提交的值;所以Oracle同一时刻不同的session有读不一致的现象,而DB2在同一时刻所有的session都是"读一致"的。

大家继续丰富,如锁的介绍等,最好是官方内部的,呵呵

Yonghang Wang 说...

我个人非常欣赏oracle对读操作的"优化",在很多情况下这是非常实用的。我想这里的一个指导思想就是如果你只是来看看表的数据,那么我就想办法提供给你一个视图,这里你可以看到你提出需求的“时刻”这张表的“实际”数据,这个过程完全不影响别人在做的事情,也完全不受其他人影响。这一点优化无疑是非常吸引人的,我将它及其后面的技术看作oracle中和RAC并列的两大优点。当然我不怎么懂oracle。所以这里说错了也请赶紧给我指出。

oracle这种策略后面是更复杂的版本管理,我没有仔细研究过,所以有一个问题:一个涉及n个表的巨大复杂查询中,这些表的数据版本如何保证一致?一定能够保证一致么?那么如何保证的?这应该牵涉到undo(?)等的一系列设置问题,由此必然会引发一系列的新问题。

但我喜欢这个改进,呵呵。

DB2是不支持数据的"多版本"的,但是提供了通过隔离级别设置(如ur)和几个db2set注册表变量可以让我们去调节相应的应用行为。

另外,我们考虑另一个问题,对一个频繁变化的表的读操作更多的是哪种模式?去特定行?还是做汇总?哪种更有意义?哪种是真实业务真实需要的?

如果你要求每个读的返回值,一定是在某个时间点有意义,那么在db2里面你需要行锁甚至表锁;在oracle里面也许你不需要,但是你看到的非常可能只是一个过期的值,这是不是有意义就很难讲了。

两者有非常大的区别,同样的sql语句在db2和oracle上可能有完全不同的执行结果和执行效率。至于哪种是我们想要的,那么在开始习惯性的骂骂产品之前,想想我们是不是应该花些时间来了解一下自己的数据库。

个人意见,对于严格的oltp应用,oracle这里的优化虽然华丽但很多时候我们也不得不将其关闭。欣赏之余我们也不能就不加鉴别的大加应用。

Yonghang Wang 说...

oracle这里常说的一个例子,比如Tom Kyte在那边最著名的expert one to one里所举的,大概是对一个bill之类的表做即时汇总,这张表同时存在insert/update/delete操作在一个查询的同时发生,假如不采用oracle的这种读机制,那么一定要加表一级的锁,不然数据结果在一定几率上会是完全没有意义的。oracle呢,则保证的是“在现在或者过去的某个时间”是有意义的。

我相信对于严格的oltp来说,这个优点的适用范围是有限的。也许做一个粗略的统计趋势还不错,可以看看一天中money是怎么增长的。但相信这种需求不是那么频繁,恐怕也不是那么重要:)

讲oracle适合oltp,没错,但也没不是想当然的那么大的优势。市场和技术还是两码事,而oracle在数据库的市场无疑是最成功的,呵呵。

放一个真实场景,大家来POC,我相信更多的测试出的是双方派出人员的水平而不是产品的真实差距。简单讲,恐怕我们在这里的绝大多数人或者全部根本没有能力将产品的潜力发挥出来。

顺便骂一句,db2的marketing真tmd的有问题。06年听说要免费发放n多介质给大家随便用,后来听说某级别的大脑袋决定的这只给买了x server的客户。晕,搞什么搞。

还不如你就每个大学发上一千套,拿点funding弄一个team支持大学里面做db项目的老板们来的有用。

算了,忧国忧民的从来都是不得志的瘪三穷书生,哈哈,真正高位的可能人家才懒得跟你一般见识呢。

Yonghang Wang 说...

http://www.itpub.net/270059.html
关于oracle锁的一个讨论