すべてのものと同様に、状況によって異なります。
OCIを使用している場合は、クライアント/サーバーアプリケーションを開発していると思います。私は通常、そのような状況のデータベースで共有サーバー接続をサポートし、アプリケーションがデータベースに接続したときに共有サーバー接続を要求します。これにより、新しいセッションを作成するためにデータベースが実行する必要がある作業量が制限されるため、アプリケーションのパフォーマンスが向上します。これには、サーバーで使用可能なリソースを他のユーザーが使用できるようにするという副作用があります。共有サーバー接続を使用すると、クエリが共有サーバープロセスに送信される必要があるため、データベースが後続のクエリを実行するときに長いコードパスが必要になりますが、共有サーバープロセスの数が妥当であれば、これは大した問題ではありません。
DBAが自動PGA管理を使用していない場合、複数のセッションを開くことも問題になる可能性があります。手動PGA管理を使用している場合、PGAはセッションごとに構成されているため、各セッションはSORT_AREA_SIZE
他のPGAコンポーネント間でソート用に個別に割り当てることができます。手動のPGA管理を使用してデータベースに多数のセッションを作成し、各セッションがそのPGA使用率を最大化しようとした場合、サーバーのRAMが不足し、全員にパフォーマンスの問題が発生する可能性があります。ただし、Oracle 10.1以降を使用している場合は、自動PGA管理を使用できます。その場合、DBAはaを構成しPGA_AGGREGATE_TARGET
(またはMEMORY_TARGET
11gにPGAを含める)、データベースがすべてのセッションにわたる集約PGAが確実に制限されるようにして、データベースのリソースが不足するようにします。
データベースが共有サーバー接続をサポートし、アプリケーションが共有サーバー接続を取得し、データベースが自動PGA管理を使用する場合、ほとんどのDBAは、作成するセッションの数をあまり気にしません。
多数のセッションを作成して、より多くの作業を並行して実行できるようにすると、セッション数を超えるとパフォーマンスの問題が発生します。たとえば、1000セッションをサポートするようにデータベースを構成するのは簡単です。たとえば、すべての1000セッションが同時にデータウェアハウスに対して重要なクエリを発行する場合、データベースが山積みにならないように構成することははるかに困難です。アプリケーションがデータベースのクエリに使用できるすべてのリソースを使い果たしている場合、DBAはおそらくOracle Resource Managerの使用を検討するでしょう。異なるアプリケーションや異なるユーザーに優先順位を付ける。たとえば、DBAはリソースマネージャーを構成して、CPU使用率が100%になった場合に、アプリケーション全体でCPUの50%を取得し、アプリケーション全体で25%を取得し、残りの25%で残りの25%を取得するようにできます。 。保留中の他のリクエストがない場合、アプリケーションはCPUを100%使用することができます。
物事を並行して実行している場合、独自の並列化コードを作成するよりもオーバーヘッドが少ないため、ステートメントを並行して実行するOracleの機能を調査することも役立ちます。たとえば、複数のセッションを開いてアプリケーションの個別のスレッドから各ステートメントを実行するのではなく、Oracleパラレルクエリを使用してステートメントをシリアルに送信するクライアントアプリケーションを作成する方がはるかに簡単で、かなり高速になると期待しますOracleは、並列クエリを使用してステートメントを実行していませんでした。並列クエリを使用する場合、データベースは、生成される並列スレーブの数を調整することもできるため、データベースが特にビジーな場合は、開始される並列スレーブが少なくなり、データベースが比較的アイドルの場合は、より多くの並列スレーブが開始されます。