2010-02-10 51 views
2

我有一個存儲過程在我們的應用程序中工作99%的時間存在問題,但在從應用程序的特定部分調用時超時。非常簡單的存儲過程將超時

該表只有3列,包含大約300條記錄。該存儲過程將只帶回一個記錄,看起來像

當SP管理工作室需要執行該

「凡列= @parameter選擇從表*」:00秒。

存儲過程在我們的應用程序中使用了很多,但似乎只在我們的程序的某個特定部分超時。我想不出爲什麼這樣一個簡單的sp會超時。有任何想法嗎?

這是一個vb.net桌面應用程序和使用SQL Server 2005

+0

什麼類型是「Column」? – 2010-02-10 21:10:17

回答

6

你已經有了一些這已經在桌子上持有鎖,因此它不能讀取的代碼。

+0

你是對的。我添加了「(nolock)」到我存儲的proc,它運行得很好。如果我刪除「with(nolock)」,那麼我會再次遇到超時錯誤。感謝您的幫助。 – jacook11 2010-02-10 21:21:44

0

您需要獲得性能指標。使用sql分析器來確認當時SP很慢或別的東西。如果是當時很慢的sql - 考慮可能迫使查詢等待的鎖。讓我們知道,我們可以在這一點上提供更具體的信息。

如果它不是SP,但說VB代碼,像RedGate's AntsJetBrains' DotTrace體面的配置文件可能會有所幫助。

3

嘗試

SELECT * FROM Table WITH (NOLOCK) WHERE Column = @parameter 
+1

只有在數據的準確性無關緊要時才使用NOLOCK。 – 2010-02-10 21:15:44

+0

這確實解決了我的問題。我添加了「(nolock)」,我的存儲過程正確運行。我刪除了「with(nolock)」,它就像之前一樣超時。 感謝您的幫助。 我是新來的stackoverflow,並注意到我只能選擇1個答案作爲「正確」的答案。由於tvanfosson首先回答,我標記他是「正確」的答案。 – jacook11 2010-02-10 21:23:21

+1

確保您瞭解NOLOCK在您的生產代碼中使用之前真正在做什麼。 – 2010-02-10 21:26:22

1

我們有一個非常類似的問題,我們有幾個存儲過程將保持超時應用程序(〜30秒),但運行SSMS罰款。

我們使用的短期解決方案是重新運行暫時解決問題的存儲過程。如果這也暫時解決了您的問題,那麼您應該調查參數嗅探問題。

如需瞭解更多信息,請參閱http://dannykendrick.blogspot.co.nz/2012/08/sql-parameter-sniffing.html