事务进程死锁是数据库应用软件里里常见的一种异常,用ERP来举例,企业人员登录erp之后,每个人都在处理自己的工作,不同的工作进程都汇集到数据库后台来处理,很容易发生死锁,用sqlserver来演示解决死锁
工具/原料
1
sqlserver
2
电脑
方法/步骤
1
1.使用sqlserver命令查看数据库死锁,重点是了解系统进程表【sysprocesses】,我们把这段sql语句写成SP_WHO_LOCK select 0 ,blocked from (select * from sysprocesses where blocked>0 ) a where not exists(select * from (select * from sysprocesses where blocked>0 ) b where a.blocked=spid) union select spid,blocked from sysprocesses where blocked>0
2
按F5执行sp_who_lock,查看具体死锁进程,看看是那个表或者事务存在问题,从举例中可以看到我目前是没有死锁的
3
假如出现了死锁,首先了解是否能直接解决,使用kill命令,先使用sp_who查看是谁造成了进程死锁,通知相关人之后,kill掉,如图所示:sp_who 找出第spid=55的进程是备份任务,假如它死锁了,直接使用kill 55来结束进程
4
使用kill命令之后,重新执行sp_who,发现55进程已经解锁不存在了
注意事项
重点就是了解系统进程表sysprocess,然后就是查看死锁进程是什么