首页 新闻 会员 周边 捐助

多个程序对sql server中的表进行查询和插入操作导致死锁

0
悬赏园豆:10 [已解决问题] 解决于 2016-09-18 11:22

我的项目中有多个程序(独立的主函数程序)对sql server中的表进行查询和插入操作,然后总是导致死锁,有没有什么办法解决这个问题,或者说是否有方法能在在项目执行插入或者查询操作时先判定什么状态然后再决定是否插入。谢谢大家了

Boblim的主页 Boblim | 菜鸟二级 | 园豆:492
提问于:2016-09-12 16:36
< >
分享
最佳答案
0

并发去操纵一张表,会产生表锁或行锁,以下几种方案可以尝试

1.查询语句from后的表名加with(nolock),即select * from table with(nolock),也许会产生脏数据

2.对数据库或表做读写分离

3.使用Redis、memcache之类的缓存,读数据时通过缓存,写数据时通过数据库

本质上应该还是代码写的不合理,或者是架构设计不合理。

收获园豆:10
朝雨 | 菜鸟二级 |园豆:272 | 2016-09-16 20:14
其他回答(6)
0

插入的时候可以查一下触发器的用法,至于查询,不知道你想做什么。

顾晓北 | 园豆:10898 (专家六级) | 2016-09-12 16:43

就是比如查询用户信息,然后另一个程序或多个程序进行了插入,此时产生循环等待

支持(0) 反对(0) Boblim | 园豆:492 (菜鸟二级) | 2016-09-12 17:17
0

开事务了吧?

吴瑞祥 | 园豆:29449 (高人七级) | 2016-09-12 16:46

没有啊,我就是普通的try..catch中进行数据库操作,可能因为多个程序操作一个表然后产生了循环等待情况

支持(0) 反对(0) Boblim | 园豆:492 (菜鸟二级) | 2016-09-12 17:18
0

这种一般做读写分离比较合适,这样就不会有死锁了

最爱晴天 | 园豆:187 (初学一级) | 2016-09-12 18:07

不过表都是在一张啊,这个比较纠结

支持(0) 反对(0) Boblim | 园豆:492 (菜鸟二级) | 2016-09-12 18:43
0

使用读写分离redis集群缓存

中国农业网zgny | 园豆:81 (初学一级) | 2016-09-13 13:26
0

【滑稽】要不要试试 NoLock

比如 select xx from TableName with(nolock)

nolock还有兄弟。可以去自己百度。(逃

长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-09-13 14:44

insert也是这样么。这样会不会对数据表有危险。

支持(0) 反对(0) Boblim | 园豆:492 (菜鸟二级) | 2016-09-13 15:07

@Boblim: insert 不用。sql语句如果能把表玩坏,你可以告微软去了。

支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-09-13 15:08
0

  查询语句中表后面加 with nolock

不负春光,努力生长 | 园豆:1382 (小虾三级) | 2016-09-16 16:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册