java 設定 データベース接続プールサイズの決定の背後にある考え方




ユニバーサル接続プールを起動できません 原因 (4)

一般的な要求が計算に50%、データベースの接続性に50%を費やしている場合は、プールに必要な接続数は50です。 もちろん、アプリケーションはできるだけ早くDB接続を解放する必要があります。

一般に、接続を保持することはデータベースにとっては高価ではありません(新しいものを作成するのはかなり高価です)。 サイズを十分大きくしても問題ありません。

設定できます

  • 最大プールサイズは100
  • 優先プールサイズは50
  • プールされた接続のアイドルタイムアウトは5分です。

私はMicrosoft SQL Serverには慣れていませんが、 最大プール数の上限は100だと思います

Tomcatはこのプールサイズの数で問題ないでしょう。

私はオープンソースのJavaベースのアプリケーション、すなわちxwikiに取り組んでいます。 hibernate.cfg.xmlを私は2としてそれぞれのパラメータのconnection.pool_sizeとstatement_cache.sizの値を見ることができます。 私のアプリケーションはその時点で最大100人のユーザーの負荷を持つことになります。 今私の質問はこれのための理想的な接続プールサイズであるべきものです。 私にとってサイズ2は非常に小さく見えます。 100人のユーザが一度に接続した場合、98人のユーザが、解放された接続の通知を待つ必要がありますか? この場合、接続プールのサイズを100に保つべきですか?

私はマイクロソフトのSQL Serverを使用しています。

これとは別に、最大接続プールサイズに制限があります。 Webサーバ(私の場合はtomcat)またはデータストアの製造元(ms sql server)に依存しますか?


接続プールのサイズを変更するのは簡単なことではありません。 あなたは基本的に必要です:

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

FlexyPoolはあなたが私たちの正しい接続プールサイズを考え出すFlexyPoolをすることを目的としています。

あなたは以下の記事をチェックするかもしれません:


未使用の場合、プールには何のためにもメモリが消費されないことに注意してください。 プールの構成は、ボトルネックがどこにあるかによって大きく異なります。

CPU、メモリ、ディスク、ネットワーク、複雑なデータベースクエリ、高い同時実行性、...それらの多くは?

デフォルトのプールサイズは、通常5から10までです。まずデータベースに問題があることを確認してください。 人工的な負荷の下で2または30のような極値を試してみて、それがどのように振る舞うかを見てください。 @ vlad-mihalceaが提供しているリンクは非常に興味深いと思います。


アプリケーションの並行性要件、データベース操作時間、そしてサーバー(またはデータベースベンダー)がサポートできる接続数を評価する必要があります。

したがって、100人のユーザーがサイズ100の接続プールを必要とするわけではありません。







flexy-pool