2012-09-26 101 views
0

我正在尝试解决用SQL Server 2000数据库编写的传统ASP网站的问题。调试数据库死锁

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

当我在站点关闭后运行sp_who2时,总会有一个占用大量CPU时间的进程。该进程将阻止数据库中的所有其他进程。

我可以通过杀死这个过程再次让网站工作。

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

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

+0

也许说明明显......你确定开发者总是关闭所有的连接对象吗? – AardVark71

+0

是的,只需检查网站,连接对象在页面底部关闭。 – Mark

+0

这已经让人放心..只有一个页面?你确定页面的结尾总是到达? (例如中间没有response.redirect,没有关闭记录集和连接的错误处理等) – AardVark71

回答

1

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

modCloseObjects() prodedure然后一直呼吁在页面的结束,一个重定向之前,内部错误处理等一个...

' 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 
+0

谢谢。我已将此代码添加到网站并确保所有连接都已关闭。如果该网站在下个月不下线,那么我会回来接受这个答案。 – Mark

+1

* OP将提供,只需等待!* – Rafael