我已将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