7.3. 読み出しクエリの負荷分散

複数のPostgreSQLノードがあり、Pgpool-IIがストリーミングレプリケーションモード、ロジカルレプリケーションモード、slonyモード、レプリケーションモードで動作していると(これらの動作モードについては項3.3.2を参照のこと)、読み出しクエリをこれらのデータベースノードに分散させ、各々のノードにより少ない数のクエリを処理させることによってより高いスループットを得ることができます。 この機能を使うためには、load_balance_modeをonにする必要があります。

今の所、非常に多くのシステムがストリーミングレプリケーションモードを使用しているので、以後このモードに焦点を当てて説明します。

7.3.1. セッションレベルのロードバランスとステートメントレベルのロードバランス

デフォルトではロードバランスモードは「セッションレベル」で、読み出しクエリを送るノードはクライアントがPgpool-IIに接続した時に決定されます。 たとえば、ノード0、1があると、新しいセッションが作られた時にどちらかのノードがランダムに選択されます。 長期的にはどちらのノードが選ばれるかの確率は、backend_weight0とbackend_weight1の比率に近づきます。 これらの値が等しければ、どちらかのノードが選ばれるチャンスは同じになるでしょう。

一方、statement_level_load_balanceがonなら、 ロードバランスノードは各クエリが開始する時に決まります。 これは、アプリケーションが自分自身のコネクションプールを持っており、Pgpool-IIに接続し続けるので、ひとたびアプリケーションが起動するとロードバランスノードが変わらない場合に有効です。 他のユースケースはバッチアプリケーションです。たくさんのクエリを発行しますが、セッションは一つです。 ステートメントレベルのロードバランスによって、複数のサーバを利用できます。

7.3.2. 特定目的のデータベースノードを作る

OLAP環境では、特定目的のために大きな読み出し専用のデータベースを持つことが望ましいです。 ストリーミングレプリケーションでレプリカデータベースを作ることによって、このようなデータベースを作ることができます。 読み出しクエリをそのデータベースに発行する方法は2つあります。 データベース名を指定する方法と、アプリケーション名を指定する方法です。 前者のためにはdatabase_redirect_preference_listを、後者のためにはapp_name_redirect_preference_listを使ってください。