web-dev-qa-db-ja.com

Oracleセッションと接続プールの関係

最初にセットアップについて説明しましょう。

2GB RAMマシン上で実行されているOracleサーバーがあります。Dbインスタンスのinitパラメータ "sessions"は160に設定されています。

アプリケーションがWebsphere 6.1にデプロイされました。接続プールの設定は、最小50と最大150です。

40人のユーザーで(jMeterを使用して)負荷テストを実行すると、すべてがうまくいきます。ただし、同時ユーザー数を60を超えると、Oracleは例外をスローし、セッション外であることを例外とします。

アプリケーションに接続リークがないか確認しましたが、見つかりませんでした。

それで、40の同時実行性がこのセットアップが取ることができるものであることを意味しますか? Oracleセッション/プロセスを増やすことは、より高い同時実行性を得る唯一の方法ですか?

接続プールのDBセッションと接続はどの程度正確に関連していますか?私の理解では、接続がセッションを超えることはできないため、最大接続プールをセッションより多く設定することは、実際には重要ではないかもしれません。あれは正しいですか ?

19
Sathya

Googleブックで book を確認してください。接続とセッションの違いについて説明します。

14
mamboking

Metalinkは、SESSIONSパラメーターについて次のアドバイスを提供します。

再帰セッションは、RDBMSの通常の機能の重要な部分です。このようなセッションを必要とするすべての状況を特定することは不可能ですが、一般に、ユーザーが開始した操作でデータディクショナリオブジェクトの操作が必要な場合は、再帰的なセッションが作成される可能性があります。簡単な例として、ある一般ユーザーとしてログインしてテーブルを作成するとします。これは、SYSユーザーが所有するobj $、tab $などに行を挿入する必要があります。通常のユーザーにはこれらのオブジェクトに挿入する権限がないため、SYSとしてログインする再帰セッションが作成されます。

解決:

SESSIONSパラメータを増やします。

推奨は、再帰セッションのSESSIONS値の50%を保持することです。したがって、たとえば、30のクライアントセッションを開くことが予想される場合は、SESSIONSパラメータを60に設定します。

したがって、どのwebsphereとユーザープロセスがこれを実行しているかに応じて、表示されている内容を部分的に説明できます。

4
DCookie

すべての接続で同じユーザーアカウントを使用していますか?その場合は、そのユーザーアカウントにユーザーごとのセッション制限があるかどうかを確認することをお勧めします。

また、40を超える接続のライセンスがありますか? (パラメーターファイルにLICENSE_MAX_SESSIONが設定されているかどうかを確認してください)

1
Eric Petroelje

セッションプールはクライアント側で駆動されます。データベースが許可するセッションの数はわかりません(または制御しません)。

サーバーを調べて、許可される実際の接続数を判別し、サーバーが許可する接続数に基づいてセッションプール番号を設定する必要があります。

接続プールでは、許可されているすべての接続を使用しないでください。これにより、他のIDが接続されます。 USER_1を使用するアプリケーションがある場合、許可された接続の一部を使用するように接続プールを設定しますが、十分な接続を残します...ああ、DBAがログインするように言ってください。

-編集-
接続プールがいっぱいになる前に、プロセスがおそらく不足しています。

SQL> show parameter processes

NAME                                 TYPE        VALUE
--------------------------------------------------------------------------------
processes                            integer     40

これは許可されているプロセスの総数です。ここで、すでに使用されているプロセスの数を確認します。それらの多くはバックグラウンドプロシージャであり、決して考えたことはありません。

SQL> select count(*) from v$process;
1
Brad Bruce

私のv $ sessionには30のエントリがあり、そのうち4つはユーザー名を持っています(そのうちの1つはバックグラウンドジョブです)。

バックグラウンドプロセス(バッチジョブなど)がある場合、それらはセッションを消費している可能性があります。

しかし、単にメモリが不足している可能性があります。 50セッションの接続プールの場合、2GBは少し低いようです。 Oracle 10gを想定すると、RAMは共有(SGA)とプロセス(PGA)に分けられます。SGAに1.5GBあり、すべてのセッションに500MB残っているとします。セッションがそれぞれ10MBを取得すると、約50セッションの制限に達します。

実際には、1。ボックス上で他の「もの」が実行されているため、Oracleが使用できる2GBはありません。

  1. SGAが小さいか大きい
  2. 11gを使用している可能性があり、OracleにPGAとSGAを単一のプールに割り当てさせる
  3. PGA_AGGREGATE_TARGETを使用している(セッション数に基づいてOracleがPGA設定を推測できるようにする)か、メモリ制限を自分で設定している可能性があります。
  4. あなたはものを噛むいくつかのメモリを消費するプロセスを持っているかもしれません

PS。 2GBはWindowsを使用しているという意味ですか?

1
Gary Myers