我正在尝试使用SQL Server 2000数据库解决使用经典ASP编写的网站的问题。
该网站似乎每隔几天就会崩溃。当您尝试访问该网站时,该网站没有回复。浏览器中的加载指示器将旋转,页面将保持空白。
当我在网站出现故障后运行sp_who2时,总会有一个占用大量CPU时间的进程。此过程将阻止数据库中的所有其他进程。
我可以通过终止这个过程让网站再次运作。
我无法弄清楚发生了什么。当我看到这个进程在锁定之前运行的存储过程时,它没有任何问题。运行此存储过程的页面将关闭所有连接对象。
任何可能导致这种僵局的想法,或者我如何阻止它发生?
答案 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