2011-01-24 2 views
2

こんにちは私はOracle 11gでデータベース常駐接続プーリングを試行しています。バックエンドに1つのデータベースサーバーがある場合、今私が気にする質問が1つあります。ある時点でデータベースサーバが処理できる並行要求の数は1であるか、複数の同時要求であるかは同じです。データベースサーバは一度に何個のオープン接続を持つことができますか?

私の質問に、Client1がトップ100の結果の選択クエリを要求し、Client2が何かの選択を要求した場合、サーバーは同じ瞬間に両方を処理するか、受信した最初の要求を完了しますか?その後、次のリクエストに出席する??

ここドキュメント毎の
+2

データベース内の操作はキューに入れられます。多数の要求を受信できますが、最終的には順番に処理されます(異なる分離レベルを使用して変更できます)。それは非常に速く起こりますが、同時であるように見えますが、コマンドを順番に実行していることをログで確認することができます。デフォルトの分離レベルを使用すると、SELECTはDML(INSERT、UPDATE、DELETE)文の前にデータへの優先アクセスを持つことができます。 –

+1

しかし、クエリは同時に実行されます。両方のリクエストが同時に受信された場合、それらはわずかに異なる時刻に開始されますが、次のリクエストが開始されるまでに完了するのを待つことはありません。今私はOPが何を求めているのかよくわからない。 –

答えて

6

http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/listenercfg.htm

これは、プラットフォームに固有のものです。 (それは私が特に答えたものですので、これはまた、データベースシステムによって異なりますが、あなたは、Oracle 11gの言及。)

注:

同時 接続要求のデフォルト数は 、オペレーティング・システムによって異なります。

◦Linux オペレーティングシステム:128

◦MicrosoftのWindows XP ProfessionalのSP2 :10

◦MicrosoftWindows 2003のLinuxオペレーティングシステム およびMicrosoft Windowsのフォローで TCP/IPのデフォルト値サーバー エンタープライズ版:200

他のデータベースについては、「最大同時接続(ここにDBタイプを挿入してください)」

実際には、技術的には、一度に1つのプロセッサしか1つの計算しか処理できないため、実際には「同じ瞬間に」と尋ねるとという技術的にはです。

Threading同じように起こっているように見えるかもしれませんが、そうでない可能性があります。スレッディングは、非常にうまく動作するようにコンピュータを使用しているので、が表示されます。は、個々のタスクを処理することによって同時に発生しているようですが、実際はそうではありません。しかし、それはここで扱うことができるよりも大きな話題です。

+0

これらはデフォルトであり、データベースではなくリスナーに関係します。リスナーを完全にバイパスすることは完全に可能です。データベースに関する限り、SESSIONSパラメータは、同時ログイン可能なユーザー数を決定します。 – DCookie

1

DBMSは、多くの接続を同時に処理することができます。しかし、通常、コアごとにいくつかのクエリ(2-3になる可能性があります)が同時に処理されます。

@David一度に1つのプロセッサで1つの計算しか処理できないが、ロードがディスクにバインドされていると、データがロードされるのを待っている間に他のクエリを処理する余裕が非常に多い。

+0

DBクエリはほとんどディスクにバインドされません。すべてがメモリ上にあり、ディスクにバインドされたログファイルへの書き込みです(したがって、潜在的なパフォーマンスの問題)。 –

+1

私はこの声明に同意しなければなりません。 「すべて」は記憶にありません。 – DCookie

+0

@DCookie:多数決? –

0

クエリは通常並行して実行されます。処理できる接続の数は、サーバー、リスナー構成、およびプロセスとセッションの初期化パラメーターによって異なります。接続を開くとエラーが発生することがあります。

接続プールを使用している場合、それらのプールされた接続のそれぞれは、データベースインスタンスのセッションの1つとそのプロセスの1つを使用しています。(誰かが専用リスナーと共有リスナーの違いについて私に訂正するかもしれませんが、大体そうです)。プールされた接続を介した各リクエスト(クエリ)はすでに設定されている接続を使用するため、新しいTCP/IPソケットは不要で、ソケット/セッション作成に伴うオーバーヘッドはありません。最初にプールを使用します。

プール接続またはスタンドアロン接続のどちらを使用していても、問合せを実行するプロセスは他の問合せとは独立しており、他の問合せが完了するまで待機しません。更新を行っている場合、それは必ずしも真実ではありません - 別のプロセスが独自の更新を完了するのを待つかもしれませんが、単にクエリを実行しているのであればそれは要因ではありません。

リソースに対する競合が発生する可能性があるため、同時に実行される2つのクエリは、いずれかが単独で実行されるよりも少し時間がかかることがありますが、それでもまだ両方が同時に実行されています。

1

@Davidが述べているように、プロセッサは特定の瞬間に1つのことしか実行できません。

しかし、あなたの質問は簡単な答えを与えるのは簡単ではありません。サーバはキューイングされた方法でクエリを処理します(リソースの制限などは無視してください)。ただし、最初のクエリがディスクI/Oまたはその他のリソース要求のために制御を放棄しなければならないとすぐに、2番目のクエリはチャンスを得ます。それぞれのクエリが何をしているかによって、最初のクエリの前に完了することがあります。

関連する問題