次のようにクエリをキャッシュするようにpgpool2
(v3.4.3) と(v9.5)を設定しました。postgresql
memory_cache_enabled = on
memqcache_method = 'shmem'
memqcache_total_size = 67108864
memqcache_max_num_cache = 10000000
memqcache_expire = 600
memqcache_auto_cache_invalidation = on
memqcache_maxcache = 409600
memqcache_cache_block_size = 1048576
memqcache_oiddir = '/var/log/pgpool/oiddir'
クエリが実際にキャッシュされていることを確認できます。
問題は、同じテーブルで更新、挿入、削除を行った後でもキャッシュが無効化されないことです。次のことが起こります:
- テーブルから行を選択します - キャッシュは存在しません - 実際の選択が実行されます。
- 同じ行を選択すると、行はキャッシュから取得されます。
- 同じ行を更新します - 成功。
- 同じ行を選択すると、行はキャッシュから取得されます。
キャッシュの無効化はpublic
スキーマ内では期待通りに動作しますが、他のスキーマでは動作しません。私はこれをよくある質問:
スキーマ修飾されたテーブル名を使用すると、pgpool-II はメモリ上のクエリ キャッシュを無効化せず、古いデータを取得します。なぜでしょうか? 「pgpool_regclass」関数をインストールしていないようです。この関数がないと、pgpool-II はスキーマ修飾されたテーブル名のスキーマ名部分を無視し、キャッシュの無効化が失敗します。
pgpool_adm
、pgpool_recovery
および拡張機能をとデータベースpgpool_regclass
の両方にインストールしましたが、キャッシュがまだ無効化されません。application
postgres