手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Mssql>列表

数据库死锁导致站点访问故障解决方案

来源:互联网 作者:west263.com 时间:2008-04-02
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

  前段时间完成了一个项目,但是现在该网站访问不了,真是郁闷,主机重启之后,网站运行正常,“狗”(google)也放了,“csdn”也帖了,没有解决,苦恼,后来发现是数据库死锁造成的问题。 通过这个问题,我对数据库思索也小小研究了一下,写一点相关知识。

  死锁原因:

  提取查询数据相应数据,修改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

共2页。 1 2 :

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!