web-dev-qa-db-ja.com

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

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

私はMicrosoftSQLサーバーを使用しています。

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

17
M Sach

通常のリクエストがその時間の50%を計算に費やし、50%をデータベース接続に費やしている場合、プールに必要な接続は50個だけです。もちろん、アプリケーションはできるだけ早くデータベース接続を解放する必要があります。

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

設定できます

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

私はMicrosoftSQL Serverに精通していませんが、その 最大プール制限は1

Tomcatは、この数のプールサイズで問題ありません。

接続プールのサイズ設定は簡単なことではありません。基本的に必要なもの:

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

FlexyPool は、適切な接続プールサイズを把握するのに役立つことを目的としています。

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

8
Vlad Mihalcea

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

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

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

2

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

したがって、100ユーザーは、サイズ100の接続プールが必要であることを意味しません。

2
donnior