Pgpool-IIはPostgreSQLのpoolを管理することによって、単一のPostgreSQL構成では得られない以下のような機能を提供します。
Pgpool-IIは複数のPostgreSQLサーバを使い、故障したサーバを自動的に取り除くことによってデータベースの仕事を継続して高可用性 (HA)機能を提供します。 これは自動フェイルオーバと呼ばれます。 また、Pgpool-IIはPgpool-II自身のHA機能を提供しており、これをWatchdogと呼びます (詳細は第4章をご覧ください。) 更にPgpool-IIは洗練されたクォーラム(quorum)アルゴリズムを採用しており、偽陽性エラーとスプリットブレイン問題を回避することが可能で、HAシステム全体が非常に信頼性の高いものになっています。 詳細は項5.15.6をご覧ください。
Pgpool-IIは読み込みクエリを複数のPostgreSQLサーバに分散させて性能向上させることがで きます。 これは負荷分散と呼ばれます。書き込みクエリはプライマリサーバ(ストリーミングレプリケーションモード時)かすべてのサーバ(ネィティブレプリケーションモードあるいはスナップショットアイソレーションモード)に送られます。 これらのモードの詳細は項3.3.2をご覧ください。 どの場合でも、Pgpool-IIは自動的に読み込みクエリと書き込みクエリの違いを判断します。
これらの基本的な機能以外に、Pgpool-IIは以下の機能を提供します。
Pgpool-IIは、PostgreSQLサーバへの確立された接続を維持し、プロパティ(つまりユーザ名、データベース、プロトコルバージョン、他に指定されていれば接続パラメータも)が同じ新規のコネクションが到着する度に再利用します。 コネクションオーバヘッドを軽減することによって、システム全体のスループットを改善します。
Pgpool-IIはコマンド一つでデータベースノードのオンラインリカバリができます。 自動フェイルオーバと組み合わせることで、フェイルオーバにより切り離されたノードをスタンバイとして自動で復帰させることも可能です。 新しいPostgreSQLサーバを同期しノードとして追加することもできます。
PostgreSQLへの最大同時接続数には制限があり、その制限に達すると新しいコネクションは拒否されます。 最大接続数を大きくすると、リソースの消費が増え、システム全体の性能に悪影響があります。 Pgpool-IIにも最大接続数の制限があります。 しかし、制限を超えた接続要求はすぐにエラーが返るのではなく、待ち行列に入ります。 ただし、制限を超えた接続要求に対してエラーを返すように設定することも可能です(4.1 以降)。
Watchdogは、複数のPgpool-IIを協調させて動作させることにより、単一障害点やスプリットブレインの起きない堅牢なクラスタを運用することが可能です。 スプリットブレインを防ぐためには、少なくとも3台のPgpool-IIノードが必要です。 他のPgpool-IIの死活監視を行い、障害を検出することができます。 稼働系のPgpool-IIがダウンしても、待機系のPgpool-IIが稼動系に昇格し、仮想IPを引き継ぐことができます。
SELECT文とその検索結果をキャッシュに保存できます。同じSELECT文が発行された場合、Pgpool-IIはキャッシュから結果を返します。 SQLの解析もPostgreSQLへのアクセスも行われないため、インメモリキャッシュの利用は非常に高速です。 反面、キャッシュを保存するオーバヘッドが生じるので、通常の方法より遅くなる場合もあります。
Pgpool-IIは、PostgreSQLのバックエンドフロントエンドプロトコルを理解し、バックエンドとフロントエンドの間でメッセージを転送します。 つまり、データベースアプリケーション(フロントエンド)にはPgpool-IIが実際のPostgreSQLサーバであるように見えます。 サーバ(バックエンド)には、Pgpool-IIがフロントエンドであるように見えます。 Pgpool-IIは、サーバとクライアントに対して透過なので、既存のデータベースアプリケーションは、ソースコードに変更を加えることなくPgpool-IIを利用できます。
Pgpool-II は、Linuxをはじめ、SolarisやFreeBSDなどのほとんどのUNIX環境で動作します。 Windows では動きません。 対応するPostgreSQLのバージョンは、7.4 以降です。 Pgpool-II配下で利用するPostgreSQLサーバのメジャーバージョン、 OS やハードウェアアーキテクチャを同じものにしなければなりません。 また、バージョンが同じであっても、PostgreSQL のビルド方法が違うものを混ぜている場合の動作は保証できません。 たとえば、SSL サポートの有無、日付型の実装方法 (--disable-integer-datetimes)、ブロックサイズの違いなどは、Pgpool-IIの一部の機能に影響を与えるでしょう。 PostgreSQL のマイナーバージョンが違う場合は大抵の場合問題になりませんが、 すべてのPostgreSQLのマイナーバージョンを検証したわけではないので、 できればマイナーバージョンを合わせておくことをお勧めします。
Pgpool-IIでSQLを使うにあたっては、制限事項があります。 詳細は制限事項をご覧ください。