7.5. リレーションキャッシュ

raw mode (項3.3.2参照)あるいはload_balance_modeがoffに設定されている場合を除きPgpool-IIPostgreSQLに時々、テーブルが一時テーブルかどうかなどのメタ情報を問い合わせる必要があります。 それらの情報を得るために、Pgpool-IIはプライマリPostgreSQLにときには10本ものクエリを送信することがあります(4.1以降ではその数は大幅に減っていますが、それでも完全に問い合わせの送信がなくなったわけではありません)。 このオーバーヘッドを減らすために、Pgpool-IIは「リレーションキャッシュ」を保持しています。 次にクエリに同じテーブルが含まれていると、Pgpool-IIはキャッシュからその情報を取り出します。

リレーションキャッシュの性能に関する設定するためのパラメータがあります。 詳細はrelcache_expirerelcache_sizecheck_temp_tablecheck_unlogged_tableをご覧ください。

7.5.1. 共有リレーションキャッシュ

リレーションキャッシュは基本的にプロセス内のプライベートメモリにあり、プロセスに結びついています。 ですから、あるセッションでテーブルのリレーションキャッシュが作られても、別のプロセスではそのリレーションキャッシュはまだ作られていないかも知れません。 結局すべてのプロセスでリレーションキャッシュが作成されるまで、PostgreSQLにクエリが送信され続けます。 Pgpool-II 4.1は共有メモリにリレーションキャッシュを作ることによってこの問題を克服しました。 共有メモリにリレーションキャッシュが作られると、他のセッションは共有リレーションキャッシュを検索することによってキャッシュの結果を得ることができます。 詳細はenable_shared_relcache設定パラメータを見てください。 この機能は非常に効果的なので、この機能を有効にすることをお勧めします。