使用Entity Framework,我昨晚在我的一个应用程序中收到了以下几个异常:
System.Data.EntityException: The underlying provider failed on Commit. --->
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior
to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
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.ReadNetworkPacket()
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.Commit()
at System.Data.SqlClient.SqlTransaction.Commit()
at System.Data.EntityClient.EntityTransaction.Commit()
--- End of inner exception stack trace ---
at System.Data.EntityClient.EntityTransaction.Commit()
at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
at System.Data.Entity.Internal.InternalContext.SaveChanges()
at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
关于这个错误的有趣之处在于,数据实际上是写入数据库的。I found a related post on a MS site这似乎表明这是一个与网络有关的错误。
我需要帮助的几个问题是:
提前谢谢。
更新
使用Ignite for SQL,我们能够确定来自另一个组的辅助SQL进程正在独占CPU,使我们的应用程序无法正常运行。简而言之,我们将继续增加一个辅助服务器,以防止两个团队之间发生进一步的冲突。
这个异常的有趣之处在于,事务实际上是成功的,而不是失败的。
发布于 2012-05-24 16:52:06
我敢打赌,来自事务提交命令的成功响应没有被发送(或发送得不够快),从而导致代码中出现异常。一种疯狂的边缘案例。这类异常并不一定意味着命令的实际执行失败,只意味着有一个失败。
同样,如果在发送webservice调用的响应时出现问题,也不一定意味着没有应用该调用的任何副作用。
发布于 2013-05-11 22:54:19
对于Luke来说,+1的解释是好的。错误的措辞是不幸的。
System.Data.EntityException: **The underlying provider failed on Commit.** --->
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior
应阅读
System.Data.EntityException: **The underlying provider failed to respond to Commit**
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior
可能的原因是网络或服务器问题。例如100CPU或其他服务器延迟,都是正确的。但您不知道它是否已提交,如果这是超时情况。如果收到失败的响应,则数据库应该已经回滚。当然,如果这种情况没有发生,那么DB就会使hummm崩溃,并导致潜在的腐败。我希望是半生的。
我在一个1 billion+的行表中见过...在增长下的空间分配中,由于索引和数据区需要扩展,需要花费30秒以上。但是提交确实发生了。客户端已超时。在线重组也会导致这样的延迟(至少我在DB2上看到过)
https://stackoverflow.com/questions/8430960
复制相似问题