首页 新闻 会员 周边 捐助

死锁怎么解决

0
悬赏园豆:50 [已解决问题] 解决于 2014-07-02 10:32

是这样的,之前因为突然断电,之后的所有查询就出现了死锁的错误,也查了网上很多解决办法,但是都不行,

HYRUI的主页 HYRUI | 初学一级 | 园豆:18
提问于:2014-06-30 17:45
< >
分享
最佳答案
1

一将无能,累死三军啊。别误会,说的不是你,是开发软件的那人。

首先,要彻底解决问题,肯定是要修改软件代码,软件中有造成死锁的代码。

二,死锁可以通过重启数据库暂时解决,

三,通过SQL PROFILE可以监视所有SQL语句的执行,找出死锁最可能的原因,有助于开发员解决问题。

四,如果软件没有源代码,那就只能再想办法了....

收获园豆:10
爱编程的大叔 | 高人七级 |园豆:30844 | 2014-07-01 10:15
其他回答(5)
1

能不能把详细的信息贴出来看看?

收获园豆:10
kimi_gyj | 园豆:192 (初学一级) | 2014-06-30 18:31

消息 1205,级别 13,状态 80,第 1 行 事务(进程 ID 76)与另一个进程被死锁在 线程 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务。

支持(0) 反对(0) HYRUI | 园豆:18 (初学一级) | 2014-06-30 18:34

@美。: 你看看这篇文章对你是否有帮助,http://www.doc88.com/p-700892629581.html,里面有关于排查死锁、解决死锁的思路,很不错。

支持(0) 反对(0) kimi_gyj | 园豆:192 (初学一级) | 2014-07-01 12:10
1

没有相关经验,只能帮你查资料了:http://blog.csdn.net/zwkandy/article/details/5281581

sp_who active --看看哪个引起的阻塞
sp_lock--看看锁住了那个资源id,objid ,select object_name(objid) 得到
dbcc inputbuffer(@blk)-- 看看是那个语句

收获园豆:10
幻天芒 | 园豆:37207 (高人七级) | 2014-06-30 20:10
1

停掉数据库,重新打开不就行了?

收获园豆:10
拾梦小侠ด้้้ | 园豆:713 (小虾三级) | 2014-06-30 23:15

过段时间又会出现这样,所以不算解决

支持(0) 反对(0) HYRUI | 园豆:18 (初学一级) | 2014-07-01 09:02

@美。: 那么说是sql语句或者存储过程等写的有问题了

支持(0) 反对(0) 拾梦小侠ด้้้ | 园豆:713 (小虾三级) | 2014-07-01 09:03

@阿 牛: 查询少数量是可以执行的,不算存储过程写错

支持(0) 反对(0) HYRUI | 园豆:18 (初学一级) | 2014-07-01 09:08

@美。: 当然不是写错呀,写错是压根就不能执行,是有些地方同时执行,然后又是同一资源,如果没有给它加锁的话,肯定是死锁的

支持(0) 反对(0) 拾梦小侠ด้้้ | 园豆:713 (小虾三级) | 2014-07-01 09:10

@阿 牛: 不是的,应该是存在共享锁了还存在排他锁,存现无限期等待和循环才这样的,

支持(0) 反对(0) HYRUI | 园豆:18 (初学一级) | 2014-07-01 09:13

@美。: 额,那不是自绝死路...必须要释放排他锁才吃,不然加了排他锁的是不会给别人访问的...

支持(0) 反对(0) 拾梦小侠ด้้้ | 园豆:713 (小虾三级) | 2014-07-01 09:18

@阿 牛: 我也知道啊,这不是都试过了,都没能解决嘛,昨天还是月底。。。报表什么的都不能做了

支持(0) 反对(0) HYRUI | 园豆:18 (初学一级) | 2014-07-01 09:30
0

SQL脚本问题,自己监视下sql服务器的执行.

吴瑞祥 | 园豆:29449 (高人七级) | 2014-07-01 09:28
1

一般情况下,你不加事务的话,是很少会出现这样的情况的。

建议你先把所有加事务的部分找出来,再分析看哪些事务会造成死锁的可能,然后逐个排查试错。

收获园豆:10
Tim Lee | 园豆:350 (菜鸟二级) | 2014-07-01 16:55

那还不如用SQL PROFILE跟踪吧

支持(0) 反对(0) HYRUI | 园豆:18 (初学一级) | 2014-07-01 16:59

@美。: 我提的是解决问题的思路.

你也可以在出问题的时候SQL PROFILE跟踪是查看哪个sql报出来这个错误。

但是造成的死锁的事务肯定是在它之前早就锁住了。所以你还是需要去排查和此报错部分的sql相关的事务.

支持(0) 反对(0) Tim Lee | 园豆:350 (菜鸟二级) | 2014-07-01 17:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册