我已經將pgpool2
(v3.4.3)和postgresql
(v9.5)配置為快取查詢,如下所示:
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 會忽略模式限定表名的模式名稱 pat,且快取失效會失敗。
我已經在和資料庫上安裝了pgpool_adm
,pgpool_recovery
和pgpool_regclass
擴展,但快取仍然沒有失效。application
postgres