2017-04-08 162 views
6

.NET用Oracle.DataAcess.dllを使用してOracleデータベースへの接続および問合せを実行するIIS 7でホストされているWebアプリケーションがあります。 先週、このコンポーネントによってスローされた多数のエラーが突発的に発生しました。「接続要求がタイムアウトしました。ODP.NET接続要求のタイムアウトが発生しました

数時間のデバッグ後、接続要求がタイムアウトし、コード番号が-1000(oracle.DataAccessのORAエラーがスローされませんでした)のエラーが発生しているというエラーが実際に発生していることがわかりました。 Oracleデータベースでは、そのマシンの接続が1つしかなく、「非アクティブ」状態になっていました。 接続が1つしかありませんでしたが、デバッグ時に接続を開こうとすると実際にタイムアウトしました。

私は接続プール戦略を使用していませんが、デバッグモードで表示されていたので、最大接続数が100であり、タイムアウトが15秒であるという(デフォルトでは値を指定していなくても)それは生存時間が0であることを意味します。つまり、そのマシン上のアプリケーションは100の接続を処理できます。

これで、「接続要求がタイムアウトしました」という理由がわかりません。私のアプリケーションが1つの接続と5つの接続を持っていた場合に発生した接続数がわずかであることを示しているDBが、100接続まで(デフォルトの接続プールの設定に従って) 100のうち)。

私は私のアプリをリサイクルした後、具体的にこの問題を解決することができたが、それは既に一度ので、これは、このための解決策ではありません以上のことを起こった...

は何か、私はだとされていることに注意します行方不明?

私のアプリケーションは実際に見たより多くの接続を使用していますか?

*アップデート:私はOracle.DataAccessと「WaitForRegularConnection」メソッドで立ち往生している他の多くのスレッドの「PopulatePool」メソッドで立ち往生多くのスレッドがあることをデバッグ中に見つけた ...

Oracleへ

All threads Populate pool stack trace

+0

これは断続的に起こっているのでしょうか、それともいつも起こっていますか? – Gilles

+0

断続的に発生します...数時間ごとに、これが私のサーバーで発生します。 –

+0

デバッグトレースを有効にして情報を共有してください。 TraceLevel 2(接続プーリングの統計情報)で十分です。 http://docs.oracle.com/cd/B28359_01/win.111/b28375/featDebug.htm –

答えて

0

注意を払うが、実行のために送られたものをクエリ、呼び出し、接続タイムアウトは、永久にあなたの要求は一つの接続を提供し、接続プールの最大数に依存しません。あなたの要求を記録し、それらをシミュレートしてみて、DBの実行時間を確認してください。

0

サーバー負荷が大きすぎて1つまたは別の理由で新しいクエリを処理するには時間がかかることがあります。サーバーの負荷ログ

  1. 見てあなたは、あなたがタイムアウトを経験した時に、それに起こっている可能性がものを見るためにできるかどうか。このデータベースをサーバーでホストしている方がよい場合は、2番目のオプションを参照してください。

  2. アプリケーションがSGAをゆっくりと過密にするパッケージを使用している可能性もあります。セッションが取り消されず、 。だから、解決策は、この "長期的な"セッションを追跡し、それが何をしようとしているのか見ることです。

関連する問題