调试数据库死锁

时间:2012-09-26 09:16:03

标签: asp-classic vbscript sql-server-2000

我正在尝试使用SQL Server 2000数据库解决使用经典ASP编写的网站的问题。

该网站似乎每隔几天就会崩溃。当您尝试访问该网站时,该网站没有回复。浏览器中的加载指示器将旋转,页面将保持空白。

当我在网站出现故障后运行sp_who2时,总会有一个占用大量CPU时间的进程。此过程将阻止数据库中的所有其他进程。

我可以通过终止这个过程让网站再次运作。

我无法弄清楚发生了什么。当我看到这个进程在锁定之前运行的存储过程时,它没有任何问题。运行此存储过程的页面将关闭所有连接对象。

任何可能导致这种僵局的想法,或者我如何阻止它发生?

1 个答案:

答案 0 :(得分:1)

不确定这是否是问题,但可能并非所有记录集和连接都是关闭的...当我们过去遇到类似的问题时,我们最终得到了以下例程。(注意这只是一个显示一个记录集闭包的片段,真正的过程实际上超过了15个不同的记录集,看看它们是否需要关闭.. )。

然后总是在页面的末尾调用 modCloseObjects()程序,在重定向之前,内部错误处理和... ...

' subroutine will close and set the objects to Nothing. '
' Close Recordsets and then the Connection '
sub modCloseObjects()

    'Close the record sets one by one '
    If ucase(TypeName(oRS)) = "RECORDSET" then
        if oRS.state <> adStateClosed then
            oRS.close
            Set oRS = Nothing
         end if
    end if

    ' if you have other recordSet objects, add them to the rourtine here: '


    ' Close the connection '

    If ucase(TypeName(objConn)) = "CONNECTION" then
        if objConn.state <> adStateClosed then
             objConn.close
             Set objConn = Nothing
        end if
    end if

end sub

如果你没有adovbs.inc,你也需要以下常量:

Const adStateClosed = &H00000000