Pgpool-IIは、PostgreSQLサーバとPostgreSQLデータベースクライアントの間に位置するプロキシソフトウェアです。 以下のような機能を提供します。
Pgpool-IIは、PostgreSQLサーバへの確立された接続を維持し、プロパティ(つまりユーザ名、データベース、プロトコルバージョン)が同じ新規のコネクションが到着する度に再利用します。 コネクションオーバヘッドを軽減することによって、システム全体のスループットを改善します。
(レプリケーションモードあるいはマスタースレーブモードで動作しているので)データベースがレプリケーションされている場合は、どのサーバにSELECTを発行しても同じ結果が得られます。 Pgpool-IIは、個々のPostgreSQLサーバの負荷を軽減するために、レプリケーションを利用します。 SELECTクエリをサーバに分散させ、システム全体のスループットを改善します。 理想的には、PostgreSQLサーバの数に比例して検索性能が向上します。 多数のユーザが検索のみのクエリを同時に発行するようなシナリオで、負荷分散は最大の効果を発揮します。
データベースサーバのどれかがダウンしたり、到達できなくなったときは、Pgpool-IIはそのサーバを切り離し、残ったサーバで運用を継続します。 自動フェイルオーバの助けになるような、タイムアウト、リトライといった洗練された機能もあります。
Pgpool-IIは複数のPostgreSQLサーバを管理することができます。 レプリケーション機能を有効にすることにより、2つあるいはそれ以上のPostgreSQLクラスタのリアルタイムバックアップを作成できます。 これによって、クラスタの一つがダウンしても、中断なしにサービスを継続できます。 Pgpool-IIには、組み込みレプリケーション(ネィティブレプリケーション)機能があります。 しかし、PostgreSQLのストリーミングレプリケーションのような、外部のレプリケーション機能を使うこともできます。
PostgreSQLへの最大同時接続数には制限があり、その制限に達すると新しいコネクションは拒否されます。 最大接続数を大きくすると、リソースの消費が増え、システム全体の性能に悪影響があります。 Pgpool-IIにも最大接続数の制限があります。 しかし、制限を超えた接続要求はすぐにエラーが返るのではなく、待ち行列に入ります。
Pgpool-IIは、PostgreSQLのバックエンドフロントエンドプロトコルを理解し、バックエンドとフロントエンドの間でメッセージを転送します。 つまり、データベースアプリケーション(フロントエンド)にはPgpool-IIが実際のPostgreSQLサーバであるように見えます。 サーバ(バックエンド)には、Pgpool-IIがフロントエンドであるように見えます。 Pgpool-IIは、サーバとクライアントに対して透過なので、既存のデータベースアプリケーションは、ソースコードに変更を加えることなくPgpool-IIを利用できます。
Pgpool-II は、Linuxをはじめ、SolarisやFreeBSDなどのほとんどのUNIX環境で動作します。 Windows では動きません。 対応するPostgreSQLのバージョンは、6.4 以降です。 また、PostgreSQL 7.4 より前のバージョンでは、使用できる機能に制限事項があります。 もっとも、そのような古いバージョンのPostgreSQL はそもそも使うべきではありません。 Pgpool-II配下で利用するPostgreSQLサーバのメジャーバージョン、 OS やハードウェアアーキテクチャを同じものにしなければなりません。 また、バージョンが同じであっても、PostgreSQL のビルド方法が違うものを混ぜている場合の動作は保証できません。 たとえば、SSL サポートの有無、日付型の実装方法 (--disable-integer-datetimes)、ブロックサイズの違いなどは、Pgpool-IIの一部の機能に影響を与えるでしょう。 PostgreSQL のマイナーバージョンが違う場合は大抵の場合問題になりませんが、 すべてのPostgreSQLのマイナーバージョンを検証したわけではないので、 できればマイナーバージョンを合わせておくことをお勧めします。
Pgpool-IIでSQLを使うにあたっては、制限事項があります。 詳細は制限事項をご覧ください。