多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLServer并发控制方面的问题

多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLServer并发控制方面的问题,第1张

概述一直一来我没能比较完美的解决SQLServer里的并发问题解决,找了很多次资料, 一直没能找到我想要得到的文章,或者解决核心问题的文章,现在我先承认自己这 方面我不行,然后向大家学习一下,提高一下。 只是一个人写程序,运行一份,那基本上是很少遇到这样的问题,若多个程序,多 个人同时访问一个SQLServer的库,那并发问题如何解决? 例如这个商业逻辑里,要运行N个SQL语句,需要进行锁定工作,我一

一直一来我没能比较完美的解决sqlServer里的并发问题解决,找了很多次资料,
一直没能找到我想要得到的文章,或者解决核心问题的文章,现在我先承认自己这
方面我不行,然后向大家学习一下,提高一下。

只是一个人写程序,运行一份,那基本上是很少遇到这样的问题,若多个程序,多
个人同时访问一个sqlServer的库,那并发问题如何解决?

例如这个商业逻辑里,要运行N个SQL语句,需要进行锁定工作,我一直不会这个如何完美的处理。

Oracle 数据库里如何处理,我是会的,而且用得很熟练, FOR UPDATE NowAIT 真的很强大。

谁能给我点破一下sqlServer里如何完美的解决,我真的是又提高了,这个问题一直困扰了我很多
年了。

大家别生气,我又发了一个首页,这个问题,应该是也困扰了很多人的,很多人也应该没能得到解决吧。

 

将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。

posted on 2009-05-05 11:41 不仅仅是通用权限设计 阅读(556) 评论(18) 编辑 收藏

评论 1531820 #1楼   回复  引用  查看     建议在博问(http://space.cnblogs.com/q)中提问。

2009-05-05 11:50 | 博客园团队        #2楼  回复 引用 查看    支持。。 2009-05-05 11:50 | KSpring        #3楼  回复 引用    开始那段什么“承认不会”的太无聊了 2009-05-05 11:50 | Ryan Gene #4楼  回复 引用    哈哈,sql server 2008应该支持啦

MysqL 5都支持行锁了

所以解决方案是:升级到sql 2008
或者换MysqL
2009-05-05 11:56 | yeml[未注册用户] #5楼  回复 引用    --引用--------------------------------------------------
Ryan Gene: 开始那段什么“承认不会”的太无聊了
--------------------------------------------------------

同意
2009-05-05 11:57 | yeml[未注册用户] #6楼[楼主]  回复 引用 查看    那到底应该怎么处理呢? 2009-05-05 12:06 | 吉日嘎拉        #7楼  回复 引用    --引用--------------------------------------------------
yeml: 哈哈,sql server 2008应该支持啦

MysqL 5都支持行锁了

所以解决方案是:升级到sql 2008
或者换MysqL
--------------------------------------------------------
sql05一样有行锁,区域锁,提高数据库并发能力有多种解决方案的,简单的如降低事务隔离级别、做数据库快照等,数据量再大的话就需要库表散列、读写分离,都需要对数据存储原理有一定理解才容易解决各种性能问题。个人感觉楼主很假
2009-05-05 12:10 | 路过。。。[未注册用户] #8楼  回复 引用    不晓得FOR UPDATE NowAIT强大在哪里,高粒度锁并不适用于大并发环境 2009-05-05 12:21 | 路过。。。[未注册用户] #9楼  回复 引用 查看    我处理的方式是在更新时加事务,如果是多人对同一个内容更新,那就只有以最后一个为准了,如果这样不合适,其他的我也不知道还有什么好办法了。 2009-05-05 12:39 | 常绍新        #10楼  回复 引用    --引用--------------------------------------------------
路过。。。: 不晓得FOR UPDATE NowAIT强大在哪里,高粒度锁并不适用于大并发环境
--------------------------------------------------------

路过同学,你指的高粒度是啥意思?

select for update是细粒度的,不知道是不是你说的高粒度的意思

楼主说的没错,select for update 是个不错的feature,在某些场合挺好用的

不然只能在线程级别做同步(代码这一级),性能会差一些的

或者不在代码做同步,采用数据库的页锁,也可以
2009-05-05 15:21 | yeml[未注册用户] #11楼  回复 引用    @yeml,抱歉,对orcl了解不多,for update应该是行级独占锁,mssql的select默认就会加共享锁,和独占锁互斥,这些只是控制锁粒度的简单实现,在各大数据库产品上都有相应方案,实在没什么强大的 2009-05-05 16:10 | 路过。。。[未注册用户] #12楼  回复 引用 查看    用2005吧 之前的版本是没有办法的 如果是有查询引起的死锁,那么可以加 No_lock(好像是这么拼写的)。不过这样是有一定风险的,在处理数据的时候。如果只是查询还好 2009-05-05 16:56 | 阿水        #13楼  回复 引用 查看   @L_419_109@ 我也关注这个 2009-05-05 17:51 | 温景良(Jason)        #14楼  回复 引用 查看    sql server™支持 sql-92 中定义的事务隔离级别,那么用设置事务隔离级别来实现,应该是可以的,我没试过,楼主可以找这方面入手试试。 2009-05-07 10:58 | 么玉顺        #15楼  回复 引用 查看    类似这种SQL语句
set transaction isolation level repeatable read
go
begin transaction
select * from publishers
select * from authors

commit transaction
2009-05-07 11:04 | 么玉顺        #16楼  回复 引用    传统方法是TIMESTAMP (for update). 我猜这可以应用在任何数据库上.

先来先得, 后动手的改动就被强行抛弃, 必须重新查询 *** 作。

一般并发冲突不多, 所以不会造成什么大问题
2009-05-10 05:10 | superdigua #17楼  回复 引用    sql Server中有 table hint:updlock
2009-05-12 21:18 | guoguo2008[未注册用户] #18楼  回复 引用    select top 1 @CardNo=F_CardNofrom Card  with (UPDLOCK) where F_Flag=0那个 with (UPDLOCK) 就是你要的 总结

以上是内存溢出为你收集整理的多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLServer并发控制方面的问题全部内容,希望文章能够帮你解决多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLServer并发控制方面的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1182130.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存