免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 14201 | 回复: 6
打印 上一主题 下一主题

sybase 的应用到底在哪里?? [复制链接]

论坛徽章:
0
1 [报告]
发表于 2008-12-10 23:17 |显示全部楼层
就我最近使用Sybase来看,与Oracle相比,ASE有两个比较致命的缺点:
1。很容易造成死锁,导致性能下降
2。数据量大的情况下,性能下降严重
虽然一个系统性能的好坏,与上层应用以及表结构的设计有很大关系,但是不可否认,上述两点Sybase自身的问题也是为什么Sybase的市场逐渐流失的原因之一吧。
另外,软件的易用性要好,毕竟,赢得了开发人员与维护人员,也是提高口碑最终占领市场的重要手段。

论坛徽章:
0
2 [报告]
发表于 2008-12-12 11:09 |显示全部楼层
关于第一个问题,举个最简单的例子。先看在Oracle中:
session1:
SQL> create table t200 (c1 int);

Table created.

SQL> insert into t200 values(100);

1 row created.

SQL> select * from t200;

        C1
----------
       100

此时没有commit,在另外一个session2中查询:
SQL> select * from t200;

no rows selected

可以看到,虽然session1中做的修改并没有commit,但是session2并没有被阻塞,可以正常查询,只不过查询到是session1修改前的数据。当sessiion1中的事务commit之后,session2中再次运行select * from t200,就会得出:
SQL> select * from t200;

        C1
----------
       100

我们再看看Sybase,同样先在一个事务插入数据:
session1:
1> use test2
2> go
1> create table t200(c1 int)
2> go
1> begin tran
2> go
1> insert into t200 values(100)
2> go
(1 row affected)

此时在session2中查询:

1> use test2
2> go
1> select * from t200
2> go
在这里被挂住了。。。。。。。。。。。。只有等待session1中的事务commit之后才能继续。
这里虽然不是一个死锁的例子,但是我相信Sybase与Oracle的这点差别导致sybase引起死锁的概率比较大,性能也会有所下降。也许各有各的好处,是我理解不够深刻,大家一起探讨。

至于第二个问题,我并没有什么具体数据。每个人心里都会有自己的一杆秤的。

论坛徽章:
0
3 [报告]
发表于 2010-08-12 10:15 |显示全部楼层
...

论坛徽章:
0
4 [报告]
发表于 2010-08-13 10:15 |显示全部楼层
呵呵,楼上,不管用什么锁,你能在sybase中实现我举的oracle的功能吗?

论坛徽章:
0
5 [报告]
发表于 2010-08-14 16:19 |显示全部楼层
本帖最后由 sybfresher 于 2010-08-14 16:20 编辑
你用的一定是APL的lock scheme吧?用dol不会出现这个问题的,话说dol都出来14年了,为什么不用do ...
shakeone 发表于 2010-08-13 12:32



    Datarows类型的表可以不会出现我举的那个insert挂住的例子,但是,如果session1是对某些行数据进行update,而session2去查询,一样的会被session1阻塞住,而Oracle不会。关键还是两者的隔离级别不一样导致的,ASE没有Oracle的默认隔离级别,本质上与是否行级锁无关。

论坛徽章:
0
6 [报告]
发表于 2010-08-16 11:59 |显示全部楼层
大哥,这个是因为S和O对事物处理时默认使用的是不同的隔离级别,你要是在S中set isolate 0的话和 ...
D_D_D_D 发表于 2010-08-16 11:29



    我并没有说ASE没有实现ANSI定义的4种隔离级别。恰恰相反,ASE很好地实现了ANSI的四种隔离级别。但是,我举的那个例子,Oracle并不是赃读啊,session2读到的是session1之前别人已经提交的完整的数据,并不包括session1正在修改的、事务没有结束的脏数据。Oracle的这各种类似IQ的snapshot的隔离级别ASE是没有的。如果你使用ASE的隔离级别0去达到不被session1阻塞的目的,你读到的东西也是不一样的,和Oracle根本不在一个层次上。。。。退10000步讲,就算我使用隔离级别0,ASE还必须要求这张表上要有唯一索引——这有可能会涉及到改变表结构,又牵涉到另外一个层面的问题了。。。

论坛徽章:
0
7 [报告]
发表于 2010-08-16 12:44 |显示全部楼层
又看了一遍你之前的例子,我认为就是Read Uncommitted,O和S两个厂商在对隔离级别为0时对事物采取 ...
D_D_D_D 发表于 2010-08-16 12:34



    你亲自去试一下,你会发现的确是不一样的 , Oracle并不是赃读。   我特意查了一下,现在MS SQL Server也有了类似“快照”的隔离级别, 而ASE仍然没有。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP