Eu configurei pgpool2
(v3.4.3) com postgresql
(v9.5) para armazenar em cache consultas como esta:
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'
Posso confirmar que as consultas estão realmente sendo armazenadas em cache.
O problema é que o cache não seria invalidado mesmo após atualizações, inserções e exclusões na mesma tabela. Isso é o que acontece:
- Selecione uma linha da tabela - o cache não está presente - a seleção real é executada.
- Selecione a mesma linha - a linha é recuperada do cache.
- Atualize a mesma linha - sucesso.
- Selecione a mesma linha - a linha é recuperada do cache.
A invalidação de cache funciona conforme esperado no public
esquema, mas não em outros esquemas. Eu li isso emPerguntas frequentes:
Quando uso nomes de tabelas qualificados pelo esquema, o pgpool-II não invalida o cache de consulta de memória e obtenho dados desatualizados. Por que? Parece que você não instalou a função "pgpool_regclass". Sem a função, o pgpool-II ignora o nome do esquema pat do nome da tabela qualificada do esquema e a invalidação do cache falha.
Instalei extensões pgpool_adm
e nos bancos de dados e pgpool_recovery
, mas o cache ainda não está invalidando.pgpool_regclass
application
postgres