精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Powerbuilder>>PB中使用注册表技术>>[ 各执己见的讨论 ]>>Re: PB中游标问题---我的看法!(2)

主题:Re: PB中游标问题---我的看法!(2)
发信人: edison()
整理人: edison(1999-10-21 01:44:45), 站内信件
哦!非常抱歉,我的上文中的第二个观点漏了一个前提没说:

前提是你的光标在一个显示申明的事务中时。即在 begin transaction 与

commit transaction 之间时。因为,在一个事务中如果一旦获得了任何锁定

他将保持到事务结束,所以如果你的光标中的脚本要运行很长时间那必定要影响

其他事务的运行!

【 在 edison (edison) 的大作中提到: 】
: 下面是我的一些观点:
:     首先,确切的说使用光标是容易造成死锁,同时影响性能。当然不是一定死锁,
: 还要看你的具体的 SQL 的写法。
:     第二,select 语句的光标他会将正在读的数据所在的页加上共享锁。这一点我
:                                      ~~~~~~~~~~~~~~~~
: 们已达成共识。但是你说共享锁不会造成死锁。我想这是关键之处。共享锁往往是造
: 成死锁的源泉。假设有个事物A要修改一个数据,那么事务A就必须获得独占锁。获得独
: 占锁的前提是不能存在共享锁。因此如果你在你的光标的循环体里写了大量的脚本,那
: 将使得事务A要等待很长时间才能获得。因此,这就会影响性能。再则,如果你的光标
: 里的脚本还需要得到其他数据页的独占锁,刚好是这数据被事务A占据了(假设A也是光
: 标),显然这将造成死锁。
:     所以说千万不要以为共享锁不会造成死锁,共享锁往往是死锁的源泉。
:     第三,访问数据的效率问题。你说5000条纪录没问题,这个我不太清楚,但是我在
: 《SQl Server 6.5 开发指南》一书上看到利用光标访问12条纪录却用了 0.8 秒,这应
: 该是一个很慢的速度才对。而且 ilike 也指出在《sql server 6.5 技术内幕》一书中
: 提到光标会带来许多的附加操作,会影响速度。
:     第四、至于那些update 用的光标估计不用多说,肯定出毛病的几率更大!
:     当然以上说的都是光标的弊病,关键看怎么写这个光标,写得好也不会出现什么
: 大问题。不过我个人还是认为使用光标倒不如将数据检索的 DW 或 DS 中这样操作起来
: 更方便!省得说不定那段SQL与那段SQL发生冲突!
: 最后再推荐一本书:《SQl Server 6.5 开发指南》也是一本很好的书。经过我的对比
: 在《sql server 6.5 技术内幕》很多没有提到的这本书都讲到了。而且这本书我觉的
: 深度比《sql server 6.5 技术内幕》要深一些。不过这本书也有一点不好,就是翻译
: 的不好,许多地方需要仔细揣摩才能明白。总的来说两本说都不错。而且这两本应该
: 很好买的!
: Ok, Good luck!
: 【 在 pthinker (Thinker) 的大作中提到: 】
: : 看了前面的文章,讨论到游标的问题,有几位认为不宜使用游标,
: : 这里我有不同的看法!
: : 1。 我自己的系统大量使用游标,丝毫没有觉得系统资源消耗大,且
: : 非常方便。
: : 2。 游标的使用与后台的DBMS有关,不同的数据库对游标的使用略有区别
: :     ,一个客户端同时打开的游标数目,与数据库参数的设置有关!如果
: :    打开的游标数目设置不够,则会出现问题。有些数据库支持游标的双向
: :    移动,大多数只能想下滚动。
: : 3。游标是OPEN 时瞬间的表的快照,使用的是共享锁,不会造成死锁,除非
: :    记录已经被使用   排它锁了。
: : 4。游标的效率与构成的SQL语法有关,游标返回的数据不要过多,过多就
: :    失去了使用游标的意义。我人为返回5000条以下数据才有使用游标的意义


--
谢谢没有在 "将本文章寄一份给原作者" 处打勾, 再次感谢!

※ 来源:.网易 BBS bbs.netease.com.[FROM: bbs.szptt.net.cn]

[关闭][返回]