2016-09-22 9 views
9

Oracleデータベースに接続するMuleアプリケーションがあります。アプリケーションは、SQLストアドプロシージャの実行を可能にするSOAP APIです。私のコネクタは接続プーリングを使用するように設定されており、接続自体を監視しています。プールの最大サイズは20ですが、データベースへの呼び出し時に、それらを開くことができます(netstat -ntl | grep PORTNUMBER)。非アクティブ後のデータベース接続をクローズ

tcp4  0  0 IP HERE  OTHER IP HERE  SYN_SENT 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  0  0 IP HERE  OTHER IP HERE  ESTABLISHED 
tcp4  10  0 IP HERE  OTHER IP HERE  ESTABLISHED 

コールが完了すると、一定期間後に接続が切断されることが予想されます。これは起こりません。私は、アプリケーションがサーバー上で動作しているときに、接続がまだ7月から開いていることに気付いたことがあります(これは数ヶ月前です)。

私がこれまで実際に数秒後に接続を閉じることがわかった唯一の方法は、XAトランザクションを有効にして接続タイムアウトを設定することです。しかし、これはアプリケーションのパフォーマンスを完全に失い、不要なオーバーヘッドになります。

XA接続を使用せずにこのようなタイムアウトを追加する方法を教えてください。 20秒間使用しないとデータベース接続が閉じられるようにしたい。

はあなたに

編集ありがとう: 一般的なデータベースコネクタが使用されている - 私たちは、データベースに許可される接続の最大数を持っているMuleのバージョン3.8.0 を、私たちは、このフローの実行中の複数のインスタンスを持っています。これは、あるインスタンスによって接続が予約され、他のインスタンスが新しい接続を取得できなくなることを意味します。

私たちが持っていた特定の問題は、それが実行された最後の時間は、数週間前だったにも関わらず、1つのインスタンスがまだ120台の接続が予約していたことでした。 2番目のインスタンスがより多くの接続をリクエストしたとき、データベース側の最大値が150であるため30にしかならなかった。

答えて

0

Oracle Transparent Connection CachingはMuleと運がない場合に試してみることができます。

いくつかの優れたケースを理解するための質問:あなたは(JDBC /データベース)を使用しているコネクタの種類

  1. やミュールのバージョンは、ありますか?
  2. なぜ後で接続が気になるのですか?あなたは幸せではないいくつかの他の症状を観察していますか? JDBC経由
+1

私は自分の質問を編集しました。 – DenCowboy

0

データベース接続が再利用されることを意図して、開いたままにするように設計されています。一般に、次世代のNoSQLデータベースを含むほとんどのデータベース技術は、スタートアップコストとシャットダウンコストが高価です。データベースの接続は、アプリケーションの起動時に確立され、アプリケーションのシャットダウン時に正常に終了する必要があります。それぞれの使用後に接続を閉じるべきではありません。

OracleはUCPと呼ばれる接続プールを提供しています。 UCPには、他のオプションの中で最大再使用時間と非アクティブ接続タイムアウトを設定することを含む、stale connectionsを制御するオプションがあります。

これは、アプリケーションにリソースを返すだけでなく、壊れた接続をチェックするのに便利です。いずれにせよ、接続を閉じる前に複数回再接続する必要があります。

+0

私は、毎回の使用の後に接続を閉じてはならず、プールを使用して再利用できることを認識しています。 接続は2ヶ月間オープンしています。 アプリケーション自体は決してシャットダウンしません。それはシャットダウンするはずではありませんが、一定の時間接続を使用していない場合は、いつでも閉じることができます。 これはMule固有の質問です.Muleを使用してこのUCPを使用する方法を知りたいと思います。 私はデータベースコネクタを設定する方法としてBeanを使用しようとしましたが、これはデフォルトのMuleコネクタを使用するのと比べてパフォーマンスが悪かったです。 – DenCowboy

関連する問題