为什么我的网站会不断冻结?

时间:2009-03-28 20:15:26

标签: c# asp.net sql sql-server

这是一个非常模糊的问题,得到答案似乎是一个长镜头,但我不知道还能做什么。

自从我不时地让我的网站上线以后它就会冻结。您单击一个链接,浏览器将在那里看起来像尝试连接。似乎冻结可持续长达2分钟左右,然后一切都很好。不久之后,它会做同样的事情。

我在日志文件中跟踪我网站上发生的所有异常。

我得到了这些......

  

超时已过期。操作完成之前经过的超时时间或服务器没有响应

堆栈跟踪显示它导致某些连接到数据库的方法。

我假设冻结与此超时问题有关。我的网站托管在共享服务器上,我的数据库也在其他服务器上,其他数据库也大约有十亿个。

但即使是在共享服务器上,这种冻结问题也一直在发生。它非常讨厌。考虑到我的网站是基于电子商务的,人们正在进行交易,我可以看到这是一个非常灾难性的问题。我想要的最后一件事就是当我的用户点击“提交付款”按钮时网站冻结,然后导致他们一遍又一遍地点击提交付款按钮,因为网站冻结,然后信用卡被收取大约10次额外费用。

有没有人对处理此问题的最佳方法有任何建议?

4 个答案:

答案 0 :(得分:4)

我猜它与数据库连接有关。检查它们是否正确释放?如果没有,那么它将全部使用它们。

还要检查您的数据库是否配置了连接池。

答案 1 :(得分:2)

  

超时已过期。操作完成之前经过的超时时间或服务器没有响应

这是一个Sql命令超时异常 - 如果您的数据库处于负载状态,它可能会有些常见。确保你正在处理SqlConnections和SqlCommands - 尽管这通常会导致池超时异常(无法从连接池中检索连接)。

可能性是,某人正在运行经过严格调整或以其他方式吸引资源的查询。它可能是您的站点,但由于您在共享数据库服务器上,它可能很容易成为其他人的。它也可能是阻塞或打开事务 - 因为那些将存在于您的数据库中,这将是一个编码问题。您可能需要让您的托管服务提供商进行跟踪,或者转移到专用数据库服务器。

你可以减少SqlCommands的CommandTimeout - 我知道这听起来有些违反直觉,但我经常发现最好早点失败而不是尝试60秒在服务器上施加额外负载。如果您的.5秒查询未在5秒内完成,则可能性不会在60秒内完成。

或者,如果你是患者类型,你可以增加CommandTimeout - 但是如果你把它压得太多,你还需要修改一段90秒的IIS超时。

答案 2 :(得分:1)

超时错误肯定是冻结页面的来源。当它发生时,页面将在返回错误消息之前等待数据库连接。由于Web服务器一次只处理来自每个用户的一个页面,因此在超时错误发生之前,整个站点似乎将被冻结。即使偶尔只为少数用户发生这种情况,对他们来说也会非常严重,因为他们根本无法访问该网站一分钟左右。

问题的严重程度取决于您获得的错误数量。根据你的描述,听起来你有点太多不正常了。

确保正确处理所有数据读取器,命令对象和连接对象,以免打开连接。

还要查看日志中的死锁错误,因为它们可能会导致超时。如果您有相互锁定的查询,您可以通过更改使用表格的顺序来改进它们。

答案 3 :(得分:1)

检查SQL Server日志,尤其是死锁。

如果您打开了多个连接,则可能正在等待另一个锁定的行。