pgpoolの可能性
pgpool-II 2.1リリース
最終回の今回は、これまでに取り上げなかったpgpool-IIのより新しい機能や活用方法について紹介します。
「第1回:pgpool-IIのインストール方法(http://www.thinkit.co.jp/article/98/1/)」で、pgpool-IIは2.1のリリースに向けてベータテスト中とお伝えしましたが、2008年7月25日にpgpool-II 2.1がリリースされました。
ダウンロードはpgpoolの公式ページ(http://pgfoundry.org/projects/pgpool/)から行えます。
パラレルクエリ
「第3回:レプリケーション&負荷分散!(http://www.thinkit.co.jp/article/98/3/)」で紹介した負荷分散は、データをすべてのノードにレプリケーションし、クライアントからの参照系のクエリをどれか1つのノードに振り分けるというものでした。
これは個々のクエリの実行時間は同じですが、同時に複数のクライアントから要求を受け付けた時に、システム全体のパフォーマンスを向上させるものでした。
一方パラレルクエリは、1つのテーブルを複数のノードに分割して並列に検索を行うことで、検索の速度を向上させる機能です。これは非常に大きなテーブルに対して検索を行うようなOLAP系のシステムで効果を発揮します。
パラレルクエリを使うには、通常のバックエンドノードのほかにシステムDBと呼ばれるデータベースを用意し、ここに、分散するテーブルの情報と分散ルールを格納します。
どのテーブルをどのように分散するかは、分散ルール関数を使って定義します。これは、分散するテーブルのプライマリキーの値によって、どのノードに割り振るかのノード番号を返す関数です。
例えば、キーの値が100000までであればノード0に、200000までであればノード1に、それより大きければノード2に振り分けるような分散ルール関数は、図1のようなSQL関数として定義することができます。
pgpool-IIは、クライアントからのクエリがINSERT文の場合はこのルールに従って、データの格納先を1つに振り分けます。また、SELECT文の場合は、必要に応じてpgpool-IIがSQLの書き換えを行い、各ノードでクエリを実行し、それらをとりまとめてクライアントに返却します。
パラレルクエリを使うには、pgpool.confのparallel_modeとシステムDBの設定を行います。設定方法の詳細については、pgpool-IIに付属のマニュアルおよびチュートリアルを確認してください。また、ソースツリーのsampleディレクトリには、分散ルールの定義のサンプルとしてdist_def_pgbench.sqlというスクリプトが収録されているのでそちらも確認してください。
続いてウォームスタンバイについて説明します。