`
haihai
  • 浏览: 71919 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

数据库事务隔离的测试

阅读更多
今天没什么事情,测试了一下各个数据库对事务隔离级别的支持情况,结果Mysql5支持是最全的,语意也和sql标准定义的相当,db2的9.1和sql server2000,虽然都支持sql标准定义的四种隔离级别,不过语意相差很大,性能很不好(也有可能是我对他们的锁的级别没有弄好,而导致事务之间发生等待),事务之间会发生阻塞,Oracle9i只是支持其中的两个,语意也和sql标准定义的相当,性能很好,我觉得就这两个非常的实用,基本已经够了,Sybase12.5版本,基本和sql server2000差不多。现在想想,怪不得Oracle在企业数据库中的份额那么的大了。
分享到:
评论
4 楼 ahuaxuan 2007-02-12  
乐观锁不是用来解决串行的,是用来解决不可重复读的,术语用错地方了,悲观锁和乐观锁都是用来解决不可重复读的,只不过乐观锁用代码控制(代码多,性能好),悲观锁用数据库来控制(代码少,性能差),悲观锁(for update)是用来锁定某一行,不是整张表
3 楼 LucasLee 2007-02-12  
抛出异常的爱 写道
数据拿上来就给精华
PS:如果有你的测试方法让我们也试验一下,是否可以重现你的作法.


同意。
楼主给出的描述太简略了。很容易误导。碰巧我也做过少量类似的试验,所以跟你的结论不同。
特别的,你怎么觉得Oracle对事务隔离的性能就很好了?还是随便猜的?

Oracle的确只支持Read-committed和Serializable两种级别的Isolation,Read-uncommitted和Repeatable-read是不支持的。
SqlServer2000支持所有四种级别。
据我的实验看来,Oracle对Serializable级别是使用"乐观锁"(不知道有没有正确使用这个术语)的方式,就是并不锁定表,但如果有违反Serializable的数据更改,则抛出异常,你只能放弃或重做一遍;
而SqlServer2000,对Serializable是使用“悲观锁”,就是物理的锁定表,即使是select语句,事务结束前,不能更改被锁定的资源。
2 楼 抛出异常的爱 2007-02-12  
数据拿上来就给精华
PS:如果有你的测试方法让我们也试验一下,是否可以重现你的作法.
1 楼 haihai 2007-02-12  
明天在看看sql server2005是个什么样子

相关推荐

Global site tag (gtag.js) - Google Analytics