首页新闻找找看学习计划

多个程序操作sql server数据库死锁问题

0
悬赏园豆:20 [待解决问题]

我的项目中有多个程序对sql server中的同一个表进行操作,由于是多个程序而不是多个进程,所以不太好进行调控,毕竟不在一个程序中。我试过了将select语句全部加上with(NOLOCK),可是还是有时候会产生死锁,可能是因为insert语句没有进行合理调控的原因。想问一下怎么解决这种多程序的死锁问题,如果是一个程序多个线程的话我还是比较会解决,遇到多程序就很尴尬了啊。

Boblim的主页 Boblim | 菜鸟二级 | 园豆:492
提问于:2016-11-18 13:57
< >
分享
所有回答(5)
0

对服务器挂sql profiler做监控,目的是抓到死锁的两条语句,接下来就比较简单了,无非就是消除问题。

Daniel Cai | 园豆:10374 (专家六级) | 2016-11-18 14:12
0

可以试下数据库读写分离,就算只读数据库发生死锁,也不会影响到只写数据库的操作,避免对主要业务造成大的影响

Artikel | 园豆:387 (菜鸟二级) | 2016-11-18 14:38

你好,想问一下读写分离是怎么操作呢,听过这个概念但是不太知道如何具体操作

支持(0) 反对(0) Boblim | 园豆:492 (菜鸟二级) | 2016-11-18 14:53

@Boblim: 就是设置一个只写数据库,然后通过数据库的发布订阅功能,将数据同步到只读数据库,这样插入修改操作就链接只写数据库,查询操作就链接只读数据库。

支持(0) 反对(0) Artikel | 园豆:387 (菜鸟二级) | 2016-11-24 16:58
0

你这个有那么复杂吗?简单点,要么分表,要么分库。

逆天蓝 | 园豆:147 (初学一级) | 2016-11-18 17:09
0

方法1:找到导致deadlock的语句,调整语句执行的顺序,创建index,减少事务的scope等;

方法2:系统会自动将deadlock的事务回滚,你可以在语句中增加异常重试机制,发现死锁,就重新执行;

方法3:分析死锁产生的原因,要么分区,要么减少加锁的粒度,

悦光阴 | 园豆:2239 (老鸟四级) | 2016-11-18 17:17
0

分开写   那样就不会出现这情况

起个什么名字呢 | 园豆:416 (菜鸟二级) | 2016-12-08 12:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册