2012-07-26 112 views
2

我使用存儲的過程來檢索的記錄,並在網格中顯示它。超時已過期。超時時間已過的操作完成之前或在服務器未響應

第一次,它會拋出一個異常:

超時過期。操作完成之前超時的時間或服務器沒有響應。

堆棧跟蹤

在System.Data.SqlClient.SqlConnection.OnError(SqlException異常,布爾breakConnection)
在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException異常,布爾breakConnection)
在系統.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
在System.Data.SqlClient.TdsParser.Run(runBehavior runBehavior,SqlCommand的cmdHandler,SqlDataReader的數據流,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)
在System.Data.SqlClient.SqlDataReader.ConsumeMetaDat一個()
在System.Data.SqlClient.SqlDataReader.get_MetaData()
在System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader的DS,RunBehavior runBehavior,字符串resetOptionsString)
在System.Data.SqlClient.SqlCommand。 RunExecuteReaderTds(的CommandBehavior cmdBehavior,runBehavior runBehavior,布爾returnStream,布爾異步)
在System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,runBehavior runBehavior,布爾returnStream,字符串方法,DbAsyncResult結果)
在System.Data.SqlClient的.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,runBehavior runBehavior,布爾returnStream,字符串方法)
在System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior行爲,字符串方法)
在System.Data.SqlClient.SqlCommand.ExecuteReader()

我用

SELECT * 
FROM sys.dm_tran_session_transactions 

檢查如何許多活動交易目前在我的數據庫中,而我沒有找到。

對於第二次以後完美運行此存儲過程(不會拋出超時除外)。這種行爲的原因是什麼?

+0

[超時的可能重複過期。在操作完成之前已經超時的時間或服務器沒有響應](http://stackoverflow.com/questions/5874706/timeout-expired-the-timeout-period-elapsed-prior-to-completion-of-操作) – 2012-07-26 10:39:45

+1

[Timeout expired可能重複。操作完成之前超時的時間或服務器沒有響應。該聲明已被終止](http://stackoverflow.com/questions/8602395/timeout-expired-the-timeout-period-elapsed-prior-to-completion-of-the-operation) – 2016-12-23 11:35:58

回答

2

如果你的存儲過程是複雜的,或者你的數據庫設計不佳(如缺少索引),那麼SQL Server可能會遇到問題想出最佳的執行計劃,可能無法評估所有選項所以它會評估儘可能多的,然後會選擇一些東西。所用的時間可能超過您的超時限制。

第二次,你正在執行相同的存儲過程,所以SQL Server可以保留它第一次完成的所有工作,並且能夠完成評估它的選項,並在你獲得另一個時間之前返回數據出。

我有一個進程,就像這樣。如果重新啓動我的服務器,第一次運行proc時,我總是得到一個超時,但第二次它總是有效。

+0

SP有計算和一些wat複雜,如果我將timeout屬性設置爲零會有幫助嗎? – 2012-07-26 10:14:24

+0

我不確定將其設置爲零。但玩超時值真的是治療症狀,而不是問題。如果可以的話,你最好嘗試改進數據庫設計/存儲過程。 – DeanOC 2012-07-26 20:08:59

相關問題