sqlserver进程死锁的解决办法(一)

sqlserver进程死锁的解决办法(一),第1张

概述之前查了很多资料,一般都是在select 语句添加with(nolock)即可,但是如果是调用一些源码jar包,可是包里面的方法没有添加with(nolock),那么久没有办法了,例如之前我做工工作流,调用的是activiti的jar包,它对于ibatis的调用,默认是不加with(nolock)的,所以,当两个以上系统,同时 *** 作一个库的时候,就会发生死锁现象,因为查找的字段没有添加索引,查找的时

之前查了很多资料,一般都是在select 语句添加with(nolock)即可,但是如果是调用一些源码jar包,可是包里面的方法没有添加with(nolock),那么久没有办法了,例如之前我做工工作流,调用的是activiti的jar包,它对于ibatis的调用,默认是不加with(nolock)的,所以,当两个以上系统,同时 *** 作一个库的时候,就会发生死锁现象,因为查找的字段没有添加索引,查找的时候不加with(nolock)的是全表,所以,还有一种办法可以解决,就是

给查找的字段添加索引,通过索引查找,锁的是行。

没索引的,就是扫描全表了

当对有影响的属性都添加索引后,那么执行sql *** 作的时候锁的就是行了,这样只要不是 *** 作同一行数据,就不会发生死锁了。类似我遇到的问题,虽然是两个系统 *** 作同一个数据库,但是不会 *** 作同一行数据,所以就不会发生死锁现象。


总结:

死锁的发生,主要是两个进程分别对一些资源加了锁,同时又请求对方枷锁的资源造成的现象,目前就我的知识来说,解决的办法,找到下面介个:

(1)理清思路,尽量不要有几个系统同时使用一个数据库,这样很难设置事物的隔离级别,并且把控数据库sql的执行顺序。

(2)select *** 作,一定要添加with(nolock);

 (3)在可能发生死锁的资源上添加索引,这样就不会发生锁全表的情况。添加的是行锁。

总结

以上是内存溢出为你收集整理的sqlserver进程死锁的解决办法(一)全部内容,希望文章能够帮你解决sqlserver进程死锁的解决办法(一)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存