0

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 に達します。

どんな助けでもいただければ幸いです

4

0 に答える 0