Я настроил 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