コネクションプールで接続負荷を軽減!

コネクションプールとは 「第1回:pgpool-IIのインストール方法(http://www.thinkit.co.jp/article/98/1/)」では、pgpool-IIとWebベースの管理ツールであるpgpoolAdminのインストール方法について解説しました。今回は、pgpool-IIの「

SRA OSS, Inc. 日本支社 マーケティング部

2008年7月10日 20:00

コネクションプールとは

 「第1回:pgpool-IIのインストール方法(http://www.thinkit.co.jp/article/98/1/)」では、pgpool-IIとWebベースの管理ツールであるpgpoolAdminのインストール方法について解説しました。今回は、pgpool-IIの「コネクションプール」機能について解説します。

 コネクションプールとは、クライアントからpgpool-IIへの接続が切断した時、pgpool-IIからPostgreSQL間の接続を保持し、後で新たにクライアントからの接続要求を受けた時に再利用することで、接続によるオーバーヘッドを軽減する機能です。

 特にWebアプリケーションのようにデータベースに対する接続、切断を頻繁に繰り返すシステムにおいて、全体的にスループットを向上させることができます。

pgpool-IIのコネクションプールの特徴

 コネクションプールの特徴の1つがprefork型であることです。PostgreSQLは、クライアントからの接続を親プロセスが待ち受け、接続要求がある度に子プロセスを起動します。これに対して、pgpool-IIはあらかじめ複数の子プロセスを起動(prefork)しておき、それぞれがクライアントからの接続を待ち受けます。

 このため、pgpool-IIとの接続は、PostgreSQLとの接続に比べて小さなオーバーヘッド確立することができます。

 もう1つの特徴が最大同時接続数の制限です。PostgreSQLでは、postgresql.confのmax_connectionsで設定した最大同時接続数を超えて接続要求を受けると、クライアントに対してエラーを返します。このため、Webアプリケーションでは、HTTPサーバーの最大同時接続数分max_connectionsを確保しておかなければいけません。

 これに対しpgpool-IIは、最大同時接続数を超えてクライアントからの接続要求があった場合もエラーとはならず、そのクライアントは他のクライアントが切断されるまで待たされます。このため、HTTPサーバーの最大同時接続数より小さい値をmax_connectionsに設定してリソースを節約し、ピーク時にPostgreSQLにかかる負荷を抑えることができます。

 では、コネクションプールの効果をみていきましょう。実際にコネクションプールを使うことによりどの程度パフォーマンスが改善できるのでしょうか。PostgreSQL用のベンチマークツール「pgbench」を使って手元のマシンで検証したところ、参照のみのトランザクション(pgbenchの-Sオプションを使用)では、pgpool-IIを使うことで3倍以上のトランザクション数を計測しました。

 なお、pgbenchはデフォルトでは最初に一度しかPostgreSQLに対して接続を行いません。接続のオーバーヘッドを計測するには、-Cオプションを使用し、トランザクションごとに新たに接続を確立させるようにします。また、pgbenchの同時接続数(-cオプションで指定)は、後述するpgpool.confのnum_init_children以下にする必要があります。

 pgbenchのインストールや使い方に関しては、PostgreSQLドキュメントの「付録 F. 追加で提供されるモジュール(http://www.postgresql.jp/document/current/html/contrib.html)」「F.18. pgbench(http://www.postgresql.jp/document/current/html/pgbench.html)」を参照してください。

 次は、主なパラメータとその設定内容について紹介します。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30