2012-06-01 39 views
2

我管理一个ASP.NET MVC 3网站,其中包含多个在线事务。在网站上,客户可以下订单,支付账单,而供应商可以向客户收费。所有这些都可以同时发生,所以我有信号来确保线程安全。SQL Server停顿十分钟

我注意到的是,大约每周一次,网站停止十分钟。我第一次尝试的是信号量的死锁,但是在创建信号量日志并分析结果之后,似乎没有死锁。另外,网站在十分钟后自动回来。

在调查时,我注意到整个网站变得反应迟钝,而不仅仅是使用信号量的部分。他们都使用数据库艰难。这就是为什么我的主要嫌疑人是数据库。

奇怪的是,每次网站冻结十分钟几乎到第二个。 SQL Server可以有计划的维护或任何可以解释这种延迟的东西吗?如果没有,你有什么想法可能会导致这种情况?

+1

它听起来像一个计划(坏)维护,但这不是默认情况下,有人安装它。 – Aristos

+0

您用完SQL连接吗?如果连接没有正确关闭,可能会发生这种情况。 – Tommy

回答

1

您的问题的答案似乎是“是”。在锁定事物的环境中发生了一些事情。

你运行sp_who2来查看停顿时正在运行的是什么吗?

如果这样不方便,请设置一项作业,以每五分钟将sp_who2输出转储到表中。当它停顿时,你可以看到正在运行的东西并从那里开始工作。

我遇到了可能是类似的问题,其中主数据库似乎被锁定。因此,重命名数据库不起作用。幸运的是,这不是一个活的事务环境,所以等待五分钟,然后再试一次。

1

ASP.NET挂起可能会出于各种原因。通常情况下,当您遇到SQL不挂起问题时,您会收到连接或命令超时。

,你已经开

  • 更好的拼抢调试Tools for Windows
  • 使用ADPlus抓住一个内存转储(adplus -hang -pn processname.exe)或DebugDiag资料和设置转储规则
  • ,使用WinDbg(或VS 2010 4.0框架)(设置符号缓存后),并开始检查使用 !threads!dumpheap -stat检查线程和堆对象。

请注意调试生产问题非常困难,WinDbg不是一个友好的工具,但猜测和查看日志更是如此。