Этот вопрос будет немного конкретным, потому что я перепробовал МНОГО вещей, и ничего из этого не помогло мне. Я надеюсь, что у кого-то есть другая идея.
Я работаю с PostgreSQL на Mac (ОС High Sierra) и пытаюсь повысить производительность для генерации материализованного представления, но больше не могу сравнивать мои изменения, поскольку кажется, что PostgreSQL кэшировал материализованное представление. Раньше создание материализованного представления занимало ~ 12 минут, а теперь - менее 10 секунд (тот же код, я отменил изменения).
Я использовал EXPLAIN (ANALYZE, BUFFERS)
, чтобы подтвердить, что почти все данные, выбираемые запросом для генерации материализованного представления, являются hit
(кэшированными), а диска почти нет read
s.
Я не знаю, кэшируется ли информация в общих буферах PostgreSQL или в кэше ОС, потому что в этот момент я сделал то, что, как я думал, очистило бы оба.
Вот что я пытался очистить кеш PostgreSQL:
- Перезапустил сервер PostgreSQL, используя
brew services stop postgres
, а затем brew services start postgres
(также пытался вызвать sync && sudo purge
между ними). С помощью top и grep я подтвердил, что postgres больше не работает.
- Используется
DISCARD ALL
, а также DISCARD с другими его опциями.
- Установите для параметра shared_buffers в postgresql.conf минимальное значение (128 КБ).
- Установлено, скомпилировано и использовано pg_dropcache .
- Я немного посмотрел на
pg_ctl
, но признаюсь, что не мог понять, как его использовать. Я получил ошибку no database directory specified and environment variable PGDATA unset
, и я не уверен, для чего нужно установить параметр -D / pgdata для моего случая.
VACUUM
. Я знаю, что это не должно было сработать, но я все равно попробовал.
Вот что я пытался очистить кеш операционной системы:
- Перезагрузка компьютера.
- Опорожнено
~/Library/Caches
и /Library/Caches
.
sync && sudo purge
, а также sync && purge
.
- Загрузился в безопасном режиме.
Я также попробовал несколько других вещей, которые, как мне показалось, заставили бы PostgreSQL сгенерировать материализованное представление с нуля (это было бы хорошо, так как сейчас мне нужно только протестировать производительность в dev):
- Клонировал главную таблицу, использованную в материализованном представлении, и сгенерировал материализованное представление из клона. Он все еще генерируется в течение 10 секунд.
- Зашифрованы некоторые значения столбцов (first_name, last_name, mem_id (не первичный ключ)). Он все еще генерировался в течение 10 секунд (и материализованное представление было сгенерировано правильно с вновь зашифрованными значениями).
Я застрял и больше не знаю, что попробовать. Будем благодарны за любые идеи / помощь!