本文详细介绍解决死锁导致网站访问故障的具体实例
前段时间完成了一个项目,但是现在该网站访问不了,真是郁闷,主机重启之后,网站运行正常,尝试了很多方法都没有解决,苦恼。后来发现是数据库死锁造成的问题。 通过这个问题,我对数据库也研究了一下,写一点相关知识。
死锁原因:
提取查询数据相应数据,修改Stat表,都是修改同一条数据,进行大数据量的操作,多用户同时操作时,造成数据库死锁和阻塞;
相关知识:
1、SQL死锁和阻塞。
2、死锁测试方法:程序中将数据库操作,循环操作1万次,打开多个窗口同时执行。
3、查找数据库死锁原因的方法。
下面的SQL语句运行之后,便可以查找出SQLServer的死锁和阻塞的源头。
use master
go
declare @spid int,@bl int
DECLARE s_cur CURSOR FOR
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
OPEN s_cur
FETCH NEXT FROM s_cur INTO @spid,@bl
WHILE @@FETCH_STATUS = 0
begin
if @spid =0
select '引起数据库死锁的是:
'+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'
else
select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '
进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'
DBCC INPUTBUFFER (@bl )
FETCH NEXT FROM s_cur INTO @spid,@bl
end
CLOSE s_cur
DEALLOCATE s_cur
exec sp_who2
责编:豆豆技术应用
正在加载评论...