Pgpool-II 4.4devel 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 第 5章サーバの設定 | 次のページ |
Pgpool-IIの全てのモードでインメモリクエリキャッシュを利用することができます。 クエリキャッシュはSELECTの結果を保管しておいて再利用するものです。 テーブルの更新によりキャッシュが古くなると、自動的にそのテーブルに関連したキャッシュが削除される(memqcache_auto_cache_invalidationがonの場合。デフォルトでこの項目はonになっています)のでPgpool-IIの再起動の必要はありません。
注意: 基本的に以下のSELECTはキャッシュされません。
immutableでない関数を含むSELECT 一時テーブル、unloggedテーブルを使ったSELECT 検索結果が memqcache_maxcache を越えるようなSELECT SELECT FOR SHARE/UPDATE /*NO QUERY CACHE*/コメントで始まるSELECT システムカタログを使用しているSELECT TABLESAMPLEを使っているSELECTただし、VIEWと unloggedテーブルは、cache_safe_memqcache_table_list に記載することでキャッシュされます。
インメモリクエリキャッシュは、SELECT文(拡張問い合わせの場合は更にバインドパラメータ)と 検索結果をペアで記録します。 同じSELECT文が発行された場合に、Pgpool-IIはキャッシュから結果を返します。 SQLの解析もPostgreSQLへのアクセスも行われないため、インメモリキャッシュからの結果の提供は非常に高速です。
反面、キャッシュをストアするオーバヘッドが生じるので、通常の方法より遅くなる場合も有ります。 また、あるテーブルが更新された場合、Pgpool-IIは自動的にそのテーブルに関係する全てのキャッシュを削除します。 そのため、更新が多いシステムではパフォーマンスが悪くなります。 キャッシュのヒット率(SHOW POOL_CACHEを使って確認できます)が70%以下の場合は、インメモリクエリキャッシュを無効にしたほうが良いかもしれません。
クエリキャッシュにSELECT結果が登録されるのは、基本的にSELECTが正常終了したときです。 明示的なトランザクションを実行中なら、そのトランザクションがコミットされるまではクエリキャッシュにはSELECT結果は登録されません。 また、拡張問い合わせでは、クラスタリングモードにより、キャッシュの登録されるタイミングが異なることに注意してください。 ストリーミングレプリケーションモードとロジカルレプリケーションモードでは、Syncメッセージがフロントエンドから送られ、その応答(Ready for queryメッセージ)がバックエンドから返ってきたタイミングになります。 ですから、
Parse (SELECT 1) Bind (SELECT 1) Execute (SELECT 1) Parse (SELECT 1) Bind (SELECT 1) Execute (SELECT 1) Sync
という順でコマンドがフロントエンドから送信されても、2回目のExecute (SELECT 1)ではクエリキャッシュは利用されません。 一方それ以外のクラスタリングモードでは、1回目のExecute (SELECT 1)の結果がクエリキャッシュに登録されるので、2回目のExecute (SELECT 1)ではクエリキャッシュが利用されます。
onにするとメモリキャッシュが有効になります。 デフォルトはoffです。
このパラメータはサーバ起動時にのみ設定可能です。
注意: enable_shared_relcacheが有効の場合、クエリキャッシュはリレーションキャッシュでも使用されます。 その上、たとえmemory_cache_enabledパラメータがオフに設定されていたとしても、クエリキャッシュは使用されます。 リレーションキャッシュの詳細は項5.15を参照してください。
以下はshmemとmemcachedの両タイプのクエリキャッシュで有効なパラメータです。
クエリキャッシュの寿命を秒単位で設定します。 デフォルト0で、キャッシュの期限はなくなり、関連テーブルが更新されるまではキャッシュが有効になります。
このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。
注意: memqcache_expireとmemqcache_auto_cache_invalidationは互いに独立です。
onに設定した場合、更新されたテーブルに関連するキャッシュを自動で削除します。 offならばキャッシュは削除されません。
デフォルト値はonです。
注意: memqcache_auto_cache_invalidationとmemqcache_expireは互いに独立です。
このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。
キャッシュされるSELECTクエリ結果の最大サイズをバイト数で指定します。 この値より大きいサイズのデータの結果はPgpool-IIにキャッシュされません。 サイズの制約によりデータのキャッシュができなかった場合、以下のメッセージが表示されます。
LOG: pid 13756: pool_add_temp_query_cache: data size exceeds memqcache_maxcache. current:4095 requested:111 memq_maxcache:4096
注意: 共有メモリによるクエリキャッシュ('shmem')の場合は、memqcache_maxcacheはmemqcache_cache_block_sizeを超えないように、'memcached'を使用する場合は、slabのサイズ(デフォルトで1MB)を超えないようにしてください。
このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。
SELECT結果がPgpool-IIにキャッシュされるべきテーブル名のリストをカンマ区切りで指定します。 このパラメータは、VIEWとunloggedテーブルにのみ適用されます。 通常のテーブルは、cache_unsafe_memqcache_table_listに記載されていない限りキャッシュされます。
テーブル名のマッチングには正規表現も利用できます (指定した各表現に ^ と $ をつけた形で使われます)。
注意: スキーマ名を付けないテーブル名とスキーマ名を付けた形の両方をクエリの中で使う場合は、両方共リストに登録してください。
#For example: #If the queries sometime use "table1" and other times "public.table1" #to refer the table1 then the cache_safe_memqcache_table_list #would be configured as follows. cache_safe_memqcache_table_list = "table1,public.table1"
注意: cache_unsafe_memqcache_table_listはcache_safe_memqcache_table_listより優先されます。
このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。
SELECT結果がPgpool-IIにキャッシュされるべきでないテーブル名のリストをカンマ区切りで指定します。
テーブル名のマッチングには正規表現も利用できます (指定した各表現に ^ と $ をつけた形で使われます)。
注意: スキーマ名を付けないテーブル名とスキーマ名を付けた形の両方をクエリの中で使う場合は、両方共リストに登録してください。
#For example: #If the queries sometime use "table1" and other times "public.table1" #to refer the table1 then the cache_unsafe_memqcache_table_list #would be configured as follows. cache_unsafe_memqcache_table_list = "table1,public.table1"
このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。
SELECTクエリが使用するテーブルにOIDを格納するディレクトリへのフルパスで指定します。
memqcache_oiddirには、各データベースのためのディレクトリが格納されます。 そのディレクトリ名はデータベースのOIDです。 更に、各データベースディレクトリの下には各テーブルのためのファイルが格納されます。 そのファイル名は同じくテーブルのOIDです。 これらのファイルの中にはクエリキャッシュへのポインタが格納されており、 キャッシュを削除する際のキーとして使われます。
注意: Pgpool-IIの通常の再起動ではmemqcache_oiddirの中身はクリアされません。
このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。
これらはキャッシュストレージとして共有メモリを使用した場合に使われるパラメーターです。
共有メモリのキャッシュサイズをバイト単位で指定します。
このパラメータはサーバ起動時にのみ設定可能です。
キャッシュエントリの数を指定します。 この設定項目は、キャッシュの管理領域の大きさを決めるために使用します。
注意: 管理領域の大きさは、memqcache_max_num_cache * 48バイトで計算できます。 少なすぎるとキャッシュを登録することができずにエラーになります。 逆に多すぎると単に空間の無駄になります。
このパラメータはサーバ起動時にのみ設定可能です。
キャッシュのブロックサイズを指定します。 Pgpool-IIはmemqcache_cache_block_sizeのブロックで管理されたキャッシュメモリを利用します。 SELECT結果はこのブロックに詰め込まれ、1つのブロックに収まらなければなりません。 従って、memqcache_cache_block_sizeを検索結果が超えると、キャッシュされません。
memqcache_cache_block_sizeは、512以上の値でなければなりません。
このパラメータはサーバ起動時にのみ設定可能です。
これらはキャッシュストレージとしてmemcachedを使用した場合に使われるパラメーターです。