Entity Framework を使用して、昨夜、アプリケーションの 1 つで次の例外を多数受け取りました。
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()
このエラーの興味深い点は、データが実際にデータベースに書き込まれたことです。これがネットワーク関連のエラーであることを示していると思われる関連記事を MS サイトで見つけました。
私が支援を利用できるいくつかの質問は次のとおりです。
- このエラーをトラブルシューティングするために必要なオプションは何ですか?
- ネットワークに関連している可能性が高いですか、それとも DB が疑わしいのでしょうか?
- トランザクションが本当に完了したかどうかをコードからどのように判断できますか?
- このエラーで DB にクエリを実行して、成功したかどうかを確認するか、単にトランザクションを再試行する必要がありますか?
- トランザクションを再試行する場合、これを Entity Framework で自動的に行うにはどうすればよいですか? または単にキャッチ/再試行するだけですか?
- 他に見るべきアイテムは?
前もって感謝します。
アップデート
Ignite for SQLを使用して、別のグループのセカンダリ SQL プロセスが CPU を独占していて、アプリケーションが正常に機能していないことを確認できました。つまり、2 つのチーム間のさらなる競合を防ぐために、セカンダリ サーバーの追加を進めています。
この例外で興味深いのは、トランザクションが失敗したのではなく、実際に成功したことです。