2008-11-07 53 views
3

我有一個存儲過程經常失敗,錯誤消息「Timeout expired」在特定用戶上。存儲過程在特定用戶上失敗

所有其他用戶都可以很好地調用sp,甚至我可以使用查詢分析器正常調用sp,只需10秒即可完成。但是,對於有問題的用戶,日誌顯示ASP總是掛起大約5分鐘,然後以超時中止。

我從ASP頁面調用像這樣「EXEC SP_TV_GET_CLOSED_BANKS_BY_USERS '006111'

有人知道如何診斷問題?我已經試着在數據庫中查看死鎖,但沒有找到任何。

謝謝,

+0

什麼您說的「特定用戶」指什麼? SP運行的用戶,還是您在查詢中使用的006111? – 2008-11-07 17:01:09

+0

'006111'是失敗的用戶標識,但如果我在查詢分析器中調用這個標記,則SP在大約10秒內完成。 – 2008-11-07 17:03:21

回答

0

我想回答你的問題,我們可能需要更多的信息。

例如,您是否使用Active Directory來驗證您的用戶?你使用SQL分析器進行調查嗎?這聽起來像是一個身份驗證問題,SQL Server在驗證這個特定用戶時遇到問題。

0

聽起來好像死鎖問題​​..

還要確保此用戶具有執行權限和讀取SQL Server中

權利,但如果當時信息被寫入其試圖將因爲交易尚未提交,因此讀取您將會死鎖。

傑夫做了一個偉大的職位,關於他的經驗和stackoverflow。 http://www.codinghorror.com/blog/archives/001166.html

0

幾件事情要檢查:

  1. 這是否是特定用戶的機器上只發生?他可以嘗試從另一臺 機器嗎? - 這可能是一個客戶端配置問題。
  2. 您可以捕獲該特定用戶運行的實際字符串並從ASP頁面運行它嗎?可能是用戶以一種產生循環或大量數據的方式執行SP。
  3. 最後,如果您使用的是組織內應用程序,則可能是您的特定用戶的權限與其他用戶的權限不同。您可以在Active Directory級別比較它們。

現在,我可以推薦一款商業軟件,它肯定能夠解決您的問題。它記錄了端到端的交易,並分析了特定的故障。但我不想在這個論壇上做廣告。如果你願意,給我留個便條,我會解釋更多。

0

嗯,我可以建議你使用SQL Server Profiler並打開一個新的會話。從ASP頁面調用存儲過程,看看發生了什麼。雖然這可能無法解決您的問題,但它肯定可以爲您提供一個開始對自己進行「調查」的起點。

5

一些想法...

閱讀註釋表明,參數嗅探是導致該問題。

  • 對於其他用戶來說,高速緩存的計劃是爲他們發送
  • 該用戶的參數不夠好,高速緩存的計劃很可能是錯的

如果該用戶已經遠遠這可能發生更多的行比其他用戶,或具有行與另一個表(因此不同的表/索引查找/掃描會更好)

爲了測試參數嗅探:

  • 在呼叫或def中使用RECOMPILE(暫時)。對於複雜查詢,這可能會很慢
  • 在超時後重建索引(或僅統計數據),然後重試。這會使所有緩存計劃

要解決: 面膜參數

DECLARE @MaskedParam varchar(10) 
SELECT @MaskedParam = @SignaureParam 

SELECT...WHERE column = @MaskedParam 

不僅僅是谷歌「參數嗅探」和「參數屏蔽」

相關問題