web-dev-qa-db-ja.com

接続プールの最適な接続数

現在、8 GBの4 CPUウィンドウボックスを使用していますRAM同じボックスにMySQL 5.xがインストールされています。アプリケーションにはWeblogicアプリケーションサーバーを使用しています。アプリケーションの同時ユーザー数200をターゲットとしています。 (明らかに同じモジュール/画面ではありません。)したがって、接続プールで構成する必要がある接続の最適数は何ですか(最小および最大数)(weblogic ASの接続プーリングメカニズムを使用しています)。

32
Silent Warrior

この質問には非常に簡単な答えがあります:

接続プール内の接続数は、WebLogicで構成された実行スレッドの数と同じである必要があります

理論的根拠は非常に単純です。接続の数がスレッドの数より少ない場合、一部のスレッドが接続を待機しているため、接続プールがボトルネックになる可能性があります。したがって、少なくともexecスレッドの数(スレッドプールサイズ)と等しくなければなりません。

10
Slava Imeshev

あなたは本当に200 concurrent usersまたはちょうど200ログインしたユーザーを意味しましたか?ほとんどの場合、ブラウザーのユーザーは、1秒あたり1ページを超えるリクエストを行うことはできません。したがって、200ユーザーは毎秒200トランザクションに変換されます。これは、ほとんどのアプリケーションにとってかなり高い数です。

いずれにせよ、例として、1秒あたり200のトランザクションを見てみましょう。各フロントエンド(ブラウザー)のtxが完了するまでに0.5秒かかり、0.5秒のうち、0.25がデータベースで費やされているとします。したがって、WebLogic theadプールには0.5 * 200、または100接続が必要であり、DB接続プールには0.25 * 200 = 50接続が必要です。

安全のために、スレッドプールの最大サイズを、負荷の急増を許容するために期待するよりも少なくとも25%大きく設定します。最小値は最大値のごく一部になる可能性がありますが、新しい接続を作成する必要があるため、一部のユーザーにとっては時間がかかる可能性があるというトレードオフがあります。この場合、50〜100の接続はDBにとってそれほど多くないので、これはおそらく適切な開始番号です。

平均トランザクション応答時間と平均DBクエリ時間を把握するには、パフォーマンステストを実行する必要があることに注意してください。これは、負荷時の時間が単一の時間とは異なる可能性があるためです。ユーザー。

54
AngerClown

接続プールのサイジングは簡単なことではありません。あなたは基本的に必要です:

  • 接続の使用状況を調査するためのメトリック
  • 利用可能な接続がない場合のフェイルオーバーメカニズム

FlexyPool は、適切な接続プールサイズを把握するのに役立ちます。

次の記事を確認してください。

9
Vlad Mihalcea

予想されるさまざまなワークフローをプロファイルして調べる必要があります。理想的には、接続プールは、最近の使用状況に基づいてライブ接続の数を動的に調整します。これは、負荷が対象の地理的エリアの現在の時刻の関数であることが一般的であるためです。

少ない数から始めて、合理的な数の同時ユーザーに到達するように試みてから、それを増やします。接続プーリングメカニズムは、ソフトウェアの他の部分ほどスケーラビリティに役立つものではないことに気付くでしょう。

6
Greg D

接続プールは、実際のニーズに基づいて拡大および縮小できる必要があります。ロギングステートメントまたはJMX監視のいずれかを使用して、実行中のシステムで分析を行うために必要な数をログに記録します。 「ピークが検出されました:X秒を超える新しいエントリをY秒以内に割り当てる必要がありました」、「接続がX秒を超えてプールからなくなった」などのシナリオのアラートを設定することを検討してください。本当の問題。

これは、個別にテストして決定する必要があるものです。正確に答える状況に応じてを熟知していないと、ほとんど不可能です。

1
matt b

このためのハードデータを取得することは困難です。それはあなたが言及していないいくつかの要因にも依存しています-

  • 200人の同時ユーザーですが、それらのアクティビティのどれだけがデータベースクエリを生成しますか?ページ読み込みあたり10クエリ?ログイン時に1つのクエリ?などなど.

  • クエリとデータベースのサイズは明らかに。一部のクエリはミリ秒で実行され、一部は数分で実行されます。

Mysqlを監視して、「show processlist」で現在アクティブなクエリを監視できます。これにより、ピーク負荷のもとでデータベースで実際に行われているアクティビティの量をよりよく把握できます。

1
Steve B.

高トランザクションの金融システムでの私の経験に基づいて、たとえば1Kリクエスト/秒を処理したい場合、32 CPUを使用していて、1000/32の接続を開いている必要がありますデータベースをポーリングします。

これが私の公式です:

RPS/CPU_COUNT

ほとんどの場合、データベースエンジンははるかに少ない数でもリクエストを処理できますが、数が少ない場合、接続は待機モードになります。

データベースがこれらのトランザクションを処理できる必要があることを言及することはかなり重要だと思います(ディスク速度、データベース構成、およびサーバー能力に基づいて)。

幸運を。

0
Farsheed