4

DB2データベースと対話する.Netアプリケーションがあります(Entity Framework、その詳細が重要かどうかはわかりません)。 ときどき、クエリで次のエラーが発生します。

ERROR [57014] [IBM][DB2] SQL0952N  Processing was cancelled due to an interrupt.

これはエラーテキスト全体です(内部例外)。SQLSTATEはありません。

繰り返しますが、これは毎回発生するわけではありません(同じクエリの場合でも)。たとえば、同じクエリを何度も実行しても、エラーが5回に1回しか発生しないことがわかります。クエリの期間は常にかなり一貫しています。

いくつかの資料を検索したところ、次のものが見つかりました: http ://www-01.ibm.com/support/docview.wss?uid=swg21450816

トラブルシューティングを試みるために、上記のドキュメントの提案に従い、QueryTimeout=0接続文字列を設定しました。これは役に立ちませんでした、私はまだほぼ同じ割合でエラーを受け取ります。私も試しましたQueryTimeout=500...同じ結果。興味深いのは、テストでは、このエラーが発生すると、およそ30秒の時点で発生することです(ドキュメントに記載されているのはデフォルトのタイムアウトです)。どういうわけか、まだデフォルトのタイムアウト設定を使用していますか?

以下の接続文字列:

<add name="myConn" connectionString="(entity framework stuff);provider=IBM.Data.DB2;provider connection string=&quot;Database=myDB;User ID=myId;Server=myServer;QueryTimeout=0&quot;" providerName="System.Data.EntityClient" />
  1. 接続文字列で指定している設定を上書きまたは優先する他のタイムアウト設定がありますか?
  2. タイムアウトの問題ではなく、他の問題を扱っている可能性はありますか?これはロックの兆候である可能性があることを読みました...しかし、現時点でデータベースにアクセスしているのはテストでこれを再現できます。それは何か他のものでしょうか?

編集

QueryTimeout=1確かにすべてのクエリがタイムアウトになると考えて設定してみました。これは影響がなかったようです。5つのクエリのうち4つは、1秒以上WELLを実行した後も完了しています。ここで何が欠けていますか?

4

2 に答える 2

3

CommandTimeoutEFデータコンテキストを次のように設定することで、この問題を解決できました。

using (dataContext = new myDB2Entities())
{
     dataContext.CommandTimeout = 60;
     // DB CODE
}

QueryTimeoutが使用しようとしていた設定は単なる時間間隔であり、すべての間隔で、データベースはアプリケーションがまだ応答を待機しているかどうかを確認することを理解しました。アプリケーションがデフォルトの30秒後に割り込みを発行しているという事実に対処していませんでした。

于 2012-07-20T22:34:35.217 に答える