2009-07-23 60 views
0

我創建了一個簡單的.Net Web服務,它運行一個非常簡單的查詢(通常應該很快)。查詢是這樣的:.Net 2.0和SQL Server 2008掛起過程

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條記錄。我試圖將字段添加到報表中,但它一直在持續,這是我如何發現此查詢掛在SQL進程中。當天早些時候,該腳本生成以下錯誤:

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

...這解釋了懸掛過程,我認爲。我們試圖殺死它,但現在它處於回滾狀態,我想我們可能不得不重新啓動sql server(在我看來,選擇查詢會嘗試回滾的奇怪)。有沒有辦法與SQL服務器或.NET來防止再次發生?或者我可以刪除這個過程在SQL中的一種方式...是否有可能掛在線程池?我仍然可以從報表中選擇所以沒有表鎖,只有當我試圖改變這個表時,它纔會旋轉它的輪子。

我對IIS沒有太多經驗,因爲我沒有訪問權限,但如果有建議,我可以將其傳遞給您。

編輯:這可能是因爲在我的catch語句中,我不檢查SqlConnection是否打開,並且它是否關閉?

回答

0

首先,如果它處於恢復狀態(例如上面描述的回滾),請不要重新啓動SQL。

ASP.NET查詢通常在30或60秒時超時。

檢查以下字段進行索引:

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

OtherDB位於何處?它是一個鏈接的數據庫嗎?這可能是問題的一部分。

該查詢的查詢計劃是什麼樣的?你能在那裏看到任何可疑的東西嗎?