Pgpool-II 4.0.4 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 第 5章サーバの設定 | 次のページ |
Pgpool-IIの全てのモードでインメモリクエリキャッシュを利用することができます。 テーブルが更新によりキャッシュが古くなっても、Pgpool-IIの再起動の必要はありません。
注意: 基本的に以下のSELECTはキャッシュされません。
immutableな関数を含むSELECT 一時テーブル、unloggedテーブルを使ったSELECT 検索結果が memqcache_maxcache を越えるようなSELECT SELECT FOR SHARE/UPDATE /*NO QUERY CACHE*/コメントで始まるSELECT システムカタログを使用しているSELECT TABLESAMPLEを使っているSELECTただし、VIEWと unloggedテーブルは、white_memqcache_table_list に記載することでキャッシュされます。
インメモリクエリキャッシュは、SELECT文(拡張問い合わせの場合は更にバインドパラメータ)と 検索結果をペアで記録します。 同じSELECT文が発行された場合に、Pgpool-IIはキャッシュから結果を返します。 SQLの解析もPostgreSQLへのアクセスも行われないため、インメモリキャッシュからの結果の提供は非常に高速です。
反面、キャッシュをストアするオーバヘッドが生じるので、通常の方法より遅くなる場合も有ります。 また、あるテーブルが更新された場合、Pgpool-IIは自動的にそのテーブルに関係する全てのキャッシュを削除します。 そのため、更新が多いシステムではパフォーマンスが悪くなります。 キャッシュのヒット率(SHOW POOL_CACHEを使って確認できます)が70%以下の場合は、インメモリクエリキャッシュ無効にしたほうがいいかもしれません。
以下は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テーブルにのみ適用されます。 通常のテーブルは、black_memqcache_table_listに記載されていない限りキャッシュされます。
テーブル名のマッチングには正規表現も利用できます (指定した各表現に ^ と $ をつけた形で使われます)。
注意: スキーマ名を付けないテーブル名とスキーマ名を付けた形の両方をクエリの中で使う場合は、両方共リストに登録してください。
#For example: #If the queries sometime use "table1" and other times "public.table1" #to refer the table1 then the white_memqcache_table_list #would be configured as follows. white_memqcache_table_list = "table1,public.table1"
注意: black_memqcache_table_listはwhite_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 black_memqcache_table_list #would be configured as follows. black_function_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を使用した場合に使われるパラメーターです。