2017-10-07 208 views
0

ODP.Netを使用してASP MVCページからOracleデータベースに接続するWebページがあります。何らかの理由でアプリケーション・プールがリサイクルされると、ユーザーの負荷が重い場合、内部Oracleクラスからの接続タイムアウト・エラーはほとんど発生しません。C#アプリケーション・プールのリサイクル時のOracleデータベースへの接続タイムアウト

内部例外発生しました。:stackTrace:OracleInternal.ConnectionPool.PoolManager`3.Get(のConnectionString csWithDiffOrNewPwd、ブールbGetForApp、文字列affinityInstanceName、ブールbForceMatch)で

どのように我々は、このシナリオを扱うことができますか?このエラーの原因は何でしょうか?

+0

これはアプリケーションプールのリサイクルには関係しないと思います。問題は最大プールサイズに達したことです。コードのどこかで接続を閉じるのを忘れた可能性があります。その結果、プールへの接続がプールに戻って他の要求を処理しないか、プールサイズが小さすぎます –

+0

接続を閉じるのを忘れた場合、 GCがそれらのオブジェクトを収集する場合にのみ発生します。したがって、かなり長い時間プールに返されない接続が多数あり、プールの最大サイズに達することになります。 –

+0

USINGブロック内で接続を行っているので、接続が終了しています。この問題はたまにしか起こらないので、接続が閉じられていないと、しばしば正しく表示されるはずです。 – Zeus

答えて

0

ユーザごとに異なる接続文字列を使用している場合や、その他の変数パラメータを使用している場合は、最大接続数を超えることができます。プーリングは、まったく同じ文字列を使用する場合にのみ機能します。カバーの下では、 "close"は無視され、接続マネージャは接続を開いたままにします。 SQL Serverでは、既存の接続が再利用されるたびにトレースコンソールで接続のリセットが表示されます。

Oracleにはおそらく同様のものがあります。

接続をトレースしたり、接続のリセットを行ったりすると、非常に多くの接続が作成されていることがわかります。

+0

web.configと同じ接続文字列 – Zeus

関連する問題