Можно ли настроить PostgreSQL так, чтобы случайные массовые обновления могли выполняться очень быстро?
Я настроил тестовую среду PostgreSQL, которая должна содержать тот же объем данных (количество строк), что и производственная база данных, и сконфигурирована в основном как производственная, чтобы имитировать ту же производительность для обычных транзакций.
Однако, поскольку это тестовая среда, иногда приходится применять некоторые уникальные, экспериментальные, временные или специальные изменения. Например, добавление или удаление некоторых индексов перед тестом производительности, пересчет значения столбца для репликации условий теста, дамп и повторное импортирование целых таблиц и т. Д.
Есть ли способ временно приостановить гарантии целостности данных, чтобы такие массовые обновления выполнялись как можно быстрее?
Например, в MySQL вы можете установить увеличенные буферы записи, отключить ведение журнала транзакций и приостановить очистку диска при фиксации транзакции. Есть ли что-то подобное в pgsql?
Среда развертывания - AWS EC2.
2 ответа
В руководстве есть глава, посвященная начальной загрузке базы данных.
Есть несколько безопасных опций, которые вы можете изменить, чтобы сделать вещи быстрее:
- увеличение max_wal_size
- увеличение checkpoint_timeout
- wal_level to
minimal
- wal_log_hints to
off
- синхронный_коммит в
off
Тогда есть некоторые довольно небезопасные варианты, чтобы сделать вещи быстрее. Небезопасное значение: вы можете потерять все свои данные в случае сбоя сервера - так что используйте на свой страх и риск!
- full_page_writes to
off
- fsync to
off
Опять же: изменив две настройки выше, вы рискуете потерять все свои данные.
Чтобы отключить WAL, вы также можете установить все таблицы на unlogged
Вы можете отключить ведение журнала WAL с ALTER TABLE ... SET UNLOGGED
, но имейте в виду, что обратная операция выведет всю таблицу в WAL.
Если это невозможно, вы можете повысить производительность, установив max_wal_size
Хью, так что вы получите меньше контрольно-пропускных пунктов.
Промывка WAL отключается настройкой fsync = off
,
Помните, что первая и третья мера разрушат вашу базу данных в случае сбоя.