.Net 2.0& SQL Server 2008挂起过程

时间:2009-07-23 16:21:41

标签: .net sql-server iis threadpool

我创建了一个简单的.Net Web服务,它运行一个非常简单的查询(通常应该非常快)。查询是这样的:

SELECT v.email 
FROM dbo.Reporting r 
INNER JOIN dbo.Reporting_EmailList el ON r.reportID = el.reportID 
INNER JOIN OtherDB.dbo.V_ActiveDir v ON el.userGUID = v.objectGUID 
WHERE r.reportID = @reportID

V_ActiveDir是活动目录数据的视图。此查询基本上为我提供了一个电子邮件地址列表,其中应该通过电子邮件发送报告。我的报告表目前只有3条记录。我试图在Reporting表中添加字段,但这是永远的,这就是我发现这个查询挂在sql进程中的方式。当天早些时候,这个脚本产生了以下错误:

Timeout expired.  The timeout period elapsed prior to completion 
of the operation or the server is not responding.

...这解释了我认为的悬挂过程。我们试图杀死它,但现在它处于回滚状态,我想我们可能不得不重新启动sql server(在我看来奇怪的是,一个select查询会尝试回滚)。是否有任何方法使用SQL Server或.net来防止再次发生这种情况?或者我可以在sql中删除此进程的方式...是否有可能在线程池中挂起了什么?我仍然可以从报告表中选择所以没有表锁定,只有当我尝试改变这个表时它才会旋转它的轮子。

我没有太多使用IIS的经验,因为我无法访问它,但如果有建议我可以传递它。

编辑:这可能是因为在我的catch语句中我没有检查SqlConnection是否打开,是否关闭它?

1 个答案:

答案 0 :(得分:0)

首先,如果SQL处于恢复状态(例如上面描述的回滚),切勿重启SQL。

ASP.NET查询通常会在30或60秒后超时。

检查以下字段是否已编入索引:

  • dbo.Reporting.ReportID,
  • dbo.Reporting_EmailList.ReportID
  • dbo.Reporting_EmailList.userGUID
  • OtherDB.dbo.V_ActiveDir.objectGUID(在基础表中)

OtherDB在哪里?它是链接数据库吗?这可能是问题的一部分。

此查询的查询计划是什么样的?你能看到任何可疑的东西吗?