2011-10-04 80 views
3

症狀是我們的數據庫服務器在運行從特定表中選擇數據的存儲過程時偶爾會發生超時異常。每週一次這樣做。我們重新啓動數據庫,事情似乎正常運行。有時如果我們等幾分鐘,它會自行恢復。如何在SQL Server中查找運行不正常的查詢?

在我們更改了一個大的(900k行)常見查詢表上的問題表上的聚集索引之後,開始發生這種情況。

我們顯然需要緩解這種情況,但是我們無法找到數據庫服務器開始超時的場景。我已經檢查了sys.dm_exec_query_stats表,但似乎無法找到導致問題的特定存儲過程,更不用說傳遞給該存儲過程的值導致性能降低。

是否有某種更精細的SQL服務器日誌記錄我可以用來查找導致性能下降的特定查詢或存儲過程?然後,一旦我發現,有沒有辦法看到傳遞給存儲過程的值或參數中的查詢?

+2

您多久更新一次統計信息並重建索引? –

回答

3

一種可能性是使用SQL Profiler(或一些類似的工具)指出速度慢的,並將精力集中在那裏。

+0

問題是在某些情況下ARITHABORT設置被設置爲OFF,但是如果沒有這個答案,我將無法找到答案。謝謝! –

0

我們的數據庫管理員使用,有效地涉及到運行一個存儲過程(每20秒左右)一個SQL代理作業記錄了一個調用的輸出sp_WhoIsActive到表的方法。 sp_WhoIsActive可輸出關於當前活動查詢的各種有用信息,包括執行時間和執行計劃。

0

這聽起來像可能是很多事情。例如,你可能在表上沒有足夠的索引。執行計劃說什麼?是否有表掃描發生?

如果查詢時間發生變化,則聽起來像過時的統計信息。嘗試更新統計信息,看看是否有幫助。

此外,只是一個側面說明。如果您不希望SqlCommand對象超時,請將CommandTimeout設置爲零。

相關問題