Ich habe pgpool2
(v3.4.3) mit postgresql
(v9.5) so konfiguriert, dass Abfragen wie diese zwischengespeichert werden:
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'
Ich kann bestätigen, dass die Abfragen tatsächlich zwischengespeichert werden.
Das Problem besteht darin, dass der Cache auch nach Aktualisierungen, Einfügungen und Löschungen in derselben Tabelle nicht ungültig wird. Folgendes passiert:
- Wählen Sie eine Zeile aus der Tabelle aus. Der Cache ist nicht vorhanden. Die eigentliche Auswahl wird ausgeführt.
- Wählen Sie die gleiche Zeile aus – die Zeile wird aus dem Cache abgerufen.
- Aktualisieren Sie die gleiche Zeile – Erfolg.
- Wählen Sie die gleiche Zeile aus – die Zeile wird aus dem Cache abgerufen.
Die Cache-Ungültigkeitserklärung funktioniert wie erwartet im public
Schema, aber nicht in anderen Schemas. Ich habe dies gelesen inFAQ:
Wenn ich schemaqualifizierte Tabellennamen verwende, macht pgpool-II den Speicherabfragecache nicht ungültig und ich erhalte veraltete Daten. Warum? Anscheinend haben Sie die Funktion „pgpool_regclass“ nicht installiert. Ohne die Funktion ignoriert pgpool-II den Schemanamen pat des schemaqualifizierten Tabellennamens und die Cache-Ungültigkeitserklärung schlägt fehl.
Ich habe sowohl die pgpool_adm
, pgpool_recovery
als auch pgpool_regclass
die Erweiterungen sowohl auf den application
als auch auf postgres
den Datenbanken installiert, aber der Cache wird immer noch nicht ungültig.