多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLS
发布时间:2020-12-12 15:10:28 所属栏目:MsSql教程 来源:网络整理
导读:一直一来我没能比较完美的解决SQLServer里的并发问题解决,找了很多次资料, 一直没能找到我想要得到的文章,或者解决核心问题的文章,现在我先承认自己这 方面我不行,然后向大家学习一下,提高一下。 只是一个人写程序,运行一份,那基本上是很少遇到这样
一直一来我没能比较完美的解决SQLServer里的并发问题解决,找了很多次资料, 只是一个人写程序,运行一份,那基本上是很少遇到这样的问题,若多个程序,多 例如这个商业逻辑里,要运行N个SQL语句,需要进行锁定工作,我一直不会这个如何完美的处理。 谁能给我点破一下SQLServer里如何完美的解决,我真的是又提高了,这个问题一直困扰了我很多 大家别生气,我又发了一个首页,这个问题,应该是也困扰了很多人的,很多人也应该没能得到解决吧。 ? 将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。posted on 2009-05-05 11:41 不仅仅是通用权限设计 阅读(556) 评论(18) 编辑 收藏
评论#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楼 回复 引用 查看 ??我也关注这个 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:updlock2009-05-12 21:18 | guoguo2008[未注册用户] #18楼 回复 引用 ??select top 1 @CardNo=F_CardNofrom Card with (UPDLOCK) where F_Flag=0那个 with (UPDLOCK) 就是你要的(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |