我的项目中有多个程序对sql server中的同一个表进行操作,由于是多个程序而不是多个进程,所以不太好进行调控,毕竟不在一个程序中。我试过了将select语句全部加上with(NOLOCK),可是还是有时候会产生死锁,可能是因为insert语句没有进行合理调控的原因。想问一下怎么解决这种多程序的死锁问题,如果是一个程序多个线程的话我还是比较会解决,遇到多程序就很尴尬了啊。
对服务器挂sql profiler做监控,目的是抓到死锁的两条语句,接下来就比较简单了,无非就是消除问题。
可以试下数据库读写分离,就算只读数据库发生死锁,也不会影响到只写数据库的操作,避免对主要业务造成大的影响
你好,想问一下读写分离是怎么操作呢,听过这个概念但是不太知道如何具体操作
@Boblim: 就是设置一个只写数据库,然后通过数据库的发布订阅功能,将数据同步到只读数据库,这样插入修改操作就链接只写数据库,查询操作就链接只读数据库。
你这个有那么复杂吗?简单点,要么分表,要么分库。
方法1:找到导致deadlock的语句,调整语句执行的顺序,创建index,减少事务的scope等;
方法2:系统会自动将deadlock的事务回滚,你可以在语句中增加异常重试机制,发现死锁,就重新执行;
方法3:分析死锁产生的原因,要么分区,要么减少加锁的粒度,
分开写 那样就不会出现这情况