Oracle で接続がアイドル状態のままになるという問題が発生しています。背景を説明するために、ユーザーは Denodo に接続し、Denodo には Oracle に接続するデータ ソースがあります。このデータ ソースは、1 つのユーザー名とパスワードで動作し、プールを作成します。プールの初期サイズは 4 で、アクティブな接続の最大数は 20 です。
JDBC、ODBC などを使用するクライアントからの接続が開始されます。一部のクライアントは、データを要求する他のサーバー (Spotfire および BusinessObjects) であり、他のクライアントは、R、python、C# などでスクリプトを開発した通常のユーザーです。また、DBeaver などのツールと接続することもできます。Oracle ユーザーには、最大 100 の接続をアイドル状態に維持するための設定があります。
これで、ユーザーはスクリプトに接続し、Denodo への接続を開き、クエリを介してデータを取得し、返されたデータを取得し、Denodo への接続を閉じるコード (私たちが確認済み) を持っています。次に、Denodo は同じことを行い、Oracle への接続を開き、クライアントからのクエリを Oracle に渡し、データを取得してクライアントに中継します。そして、これは私たちがあまり確信していない部分です. Denodo が Oracle への接続を閉じることを期待していましたが、そうではありません。接続は Oracle で開いたままになり、アイドル状態として表示されます。最終的に、ユーザー用に設定されたクォータ (100) を満たすのに十分な接続がアイドル状態になります。
これに基づいて、Denodo で Oracle への接続を調整し、これらの設定を接続に適用しました。
FETCHSIZE = 10000
BATCHINSERTSIZE = 200
VALIDATIONQUERY = 'SELECT COUNT(*) FROM SYS.DUAL'
INITIALSIZE = 4 #initial size of pool
MAXIDLE = 25 #max number of idle connections
MINIDLE = 5 #min number of idle connections
MAXACTIVE = 20 #max active in the pool
EXHAUSTEDACTION = 1
TESTONBORROW = true
TESTONRETURN = false
TESTWHILEIDLE = false
TIMEBETWEENEVICTION = 300000 #time between evictions in milliseconds
NUMTESTPEREVICTION = 10 #10 connections to be evaluated for eviction
MINEVICTABLETIME = 900000 #min evictable time in milliseconds
POOLPREPAREDSTATEMENTS = false
MAXSLEEPINGPS = 4
INITIALCAPACITYPS = 8
この設定を適用した後、アイドル状態の接続がクリアされると考えました。問題は、そうではないということです。接続が忍び寄り始め、最終的に再びいっぱいになり、他の接続が許可されないことがわかります。
私が見たいのは、Denodo が必要な接続を開き、それを使用して解放することです。Oracle で Idle 状態で接続を維持しないでください。Oracle 接続が削除されることはないようで、最終的には再び 100 に達します。
どんな助けでもいただければ幸いです