一直一来我没能比较完美的解决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并发控制方面的问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)