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

2008年7月10日(木)
SRA OSS, Inc. 日本支社 マーケティング部

コネクションプールとは

 「第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)」を参照してください。

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

著者
SRA OSS, Inc. 日本支社 マーケティング部
SRA OSS, Inc. 日本支社マーケティング部では、PostgreSQL/PowerGresのサポート、コンサルティング、販売を中心にビジネス展開しています。pgpoolのサポートやpgpoolを使った大規模システムのコンサルティングの実績もあります。http://www.sraoss.co.jp/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています