Могу ли я запускать PostgreSQL Vacuum каждые 1-2 минуты? - PullRequest
4 голосов
/ 14 марта 2012

Я рассматриваю различные базы данных с поддержкой MVCC для предстоящего проекта, и PostgreSQL появился на моем радаре.

Требования моей программы включают последовательность, примерно такую, как следующая:

  1. Считайте некоторую информацию из текущей версии базы данных, измените 80-90% данных и запишите их обратно в одну или несколько транзакций (представьте что-то вроде обновления сетки в игре жизни Конвея, где оба старых и новое состояние сетки требуется).

  2. Подождите 1-2 минуты после фиксации. В течение этого времени клиенты могут выполнять операции чтения новых данных.

  3. Повтор.

Базы данных будут ограничены чем-то вроде 2-4 ГБ.

~ 90% изменений - это обновления существующих объектов, ~ 5% будут новыми объектами и ~ 5% будут удалены объектами.

Итак, мой вопрос: могу ли я разумно запускать простую команду VACUUM, как шаг 1.5, каждые 1-2 минуты, и чтобы PostgreSQL мог отслеживать потенциально 2-3+ ГБ изменений, вносимых каждый раз?

1 Ответ

5 голосов
/ 14 марта 2012

Я полагаю, что Postgres должен преуспеть в этом сценарии.Сценарий достаточно необычен, поэтому ручной вакуум между огромными обновлениями кажется разумным вариантом.

Подумайте, можете ли вы сделать так, чтобы вместо огромных обновлений вы генерировали новый набор таблиц, анализировали их (необходимо)!), а затем, с силой транзакционного ddl, отбросьте старые и переименуйте новые на их место.Это должно облегчить Ваши заботы о ВАКУУМЕ.

В таком сценарии Вы должны провести серьезную настройку.Особенно обратите внимание на shared_buffers, параметры, связанные с контрольными точками, и параметры, связанные с вакуумом.Также помните о бенчмаркинге с реалистичными рабочими нагрузками.

...