Можем ли мы попросить Postgres использовать кэширование для определенных таблиц? - PullRequest
6 голосов
/ 15 февраля 2011

Можем ли мы попросить postgres использовать кэширование для определенных таблиц и не использовать его для нескольких таблиц вообще?

Ответы [ 5 ]

3 голосов
/ 16 февраля 2011

Чтобы читать данные и работать с ними, PostgreSQL должен поместить их в свой кэш.И это также временно поместит его в кеш операционной системы.Точное описание того, как эти данные будут в конечном итоге извлечены из кэша базы данных, как только процессы прекратят использовать его, в моем Внутри буферного кеша PostgreSQL .кэша за счет уменьшения размера параметра shared_buffers , что может привести к снижению производительности.PostgreSQL всегда читает с использованием кэша ОС, и вы не можете предотвратить его загрязнение при доступе к большим объемам данных.

Существует оптимизация для последовательных сканирований, которая сохраняет собственную базу данных shared_buffers кеш от этих данных.Таблицы, размер которых превышает ( shared_buffers / 4), ограничены использованием только небольшого объема памяти на стороне базы данных.Тем не менее, они по-прежнему будут забивать кэш операционной системы, но они, как правило, удерживают редко используемые данные в течение меньшего времени, чем база данных.

2 голосов
/ 15 февраля 2011

Вы не можете этого сделать.PostgreSQL действительно хорошо справляется со своей задачей.На самом деле, я не могу вспомнить случай, когда вы хотели бы изменить это поведение.

Если вы видите проблему (например, таблицу, использующую слишком много кэша), это, вероятно, означает, что таблица используетсянеэффективно (например, есть запросы с seq scan).Если в некоторых таблицах используется мало кеша, это либо потому, что такое мало оптимально, либо потому, что общий размер кеша слишком мал.В любом случае, PG делает все возможное.

Что именно заставило вас задать этот вопрос?

2 голосов
/ 15 февраля 2011

PostgreSQL и операционная система сделает кэширование намного лучше. Данные, которые вы не используете, не будут в кеше, данные, которые вы делаете используете, находятся в кеше. Вы не хотите бороться со своей базой данных и операционной системой, в этом нет необходимости.

2 голосов
/ 15 февраля 2011

Нет, вы не можете контролировать, что будет кэшироваться.

Но если это часто используемая таблица, она все равно будет кэширована.Если к нему не обращаются часто, он не будет кэширован.

Так что я не вижу причины пытаться контролировать это.

1 голос
/ 17 февраля 2011

Почему бы не использовать pgfincore для хранения таблиц в кэше ОС?

Текущий блог показывает, как его использовать.http://francs3.blog.163.com/blog/static/4057672720107541611270/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...