Pgpool-II не сделает недействительным кеш запросов для пользовательских схем
Я настроил 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
схема, но не в других схемах. Я прочитал это в FAQ:
Когда я использую имена таблиц, соответствующие схеме, pgpool-II не делает недействительными в кеше запросов памяти, и я получаю устаревшие данные. Зачем? Кажется, вы не установили функцию "pgpool_regclass". Без этой функции pgpool-II игнорирует pat имени схемы с полным именем таблицы, и аннулирование кэша завершается неудачно.
Я установил оба pgpool_adm
, pgpool_recovery
а также pgpool_regclass
расширения как на application
а также postgres
базы данных, но кэш все еще не является недействительным.