[英]SQL Server, C#: Timeout exception on Transaction Rollback
我有一個奇怪的問題。 我有一個.NET程序,我的進程邏輯需要一個SQL Server 2005數據庫上長時間運行的事務(~20分鍾)。 沒關系,因為沒有人並行訪問數據庫。 當出現問題時,應該回滾事務。
很少,沒有任何可見的圖案的Rollback()
我在操作DbTransaction
對象將拋出SqlException
:
Message: "Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding." StackTrace: at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadPacket(Int32 bytesExpected) at System.Data.SqlClient.TdsParserStateObject.ReadBuffer() at System.Data.SqlClient.TdsParserStateObject.ReadByte() at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest, String name, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlInternalTransaction.Rollback() at System.Data.SqlClient.SqlTransaction.Rollback()
我不知道它是否真的是一個超時問題,因為這個代碼有時會運行,有時也不會運行。 此外,我知道的唯一超時是ConnectionTimeout
和CommandTimeout
,但顯然在這種情況下這些不是問題。
有沒有人對這個問題有所了解?
非常感謝,馬蒂亞斯
交易可能需要一段時間才能回滾; 如果這需要太長時間,請確保你會超時。 似乎沒有一種明顯的方法來影響這一點 - 你可以嘗試通過TSQL管理事務 - 然后你可以(ab)使用CommandTimeout
- 但它可能只是需要一點時間,如果你正在做很多交易內部的變化; SQL Server 假設大多數事情都將運行完成,因此“提交”幾乎是免費的,而“回滾”則更昂貴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.