2

我管理一个包含多个在线交易的 ASP.NET MVC 3 网站。在网站上,客户可以下订单、支付账单,而供应商可以向客户收费。所有这些都可以同时发生,所以我有信号量来确保线程安全。

我注意到的是,大约每周一次,网站会停顿十分钟。我的第一个问题是信号量中的死锁,但是在放置信号量日志并分析结果后,似乎没有死锁。此外,网站会在十分钟后自行恢复。

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

奇怪的是,每一次,网站都会冻结十分钟,几乎到秒。SQL Server 是否可以进行定期维护或任何可以解释这种延迟的事情?如果没有,您知道是什么原因造成的吗?

4

2 回答 2

1

ASP.NET 挂起可能有多种原因。通常,当您遇到 SQL 未挂起的问题时,您会遇到连接或命令超时。

你好多了

  • 获取 Windows的调试工具
  • 使用 AdPlus 获取内存转储 ( adplus -hang -pn processname.exe) 或 DebugDiag 并设置转储规则
  • 使用 WinDbg(或用于 4.0 框架的 VS 2010)(在设置符号缓存之后)并开始使用 !threads!dumpheap -stat检查线程和堆对象来检查正在发生的事情。

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

于 2012-06-01T16:04:32.407 回答
1

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

您是否运行过 sp_who2 以查看它停止时正在运行的内容?

如果这样做不方便,则设置一个作业,每五分钟将 sp_who2 输出转储到一个表中。当它停止时,您可以看到正在运行的内容并从那里开始工作。

我遇到了类似的问题,主数据库似乎被锁定了。因此,重命名数据库不起作用。幸运的是,这不是在实时交易环境中,所以等待五分钟再试一次就可以了。

于 2012-06-01T15:36:05.273 回答