Можно ли настроить PostgreSQL так, чтобы случайные массовые обновления могли выполняться очень быстро?

Я настроил тестовую среду PostgreSQL, которая должна содержать тот же объем данных (количество строк), что и производственная база данных, и сконфигурирована в основном как производственная, чтобы имитировать ту же производительность для обычных транзакций.

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

Есть ли способ временно приостановить гарантии целостности данных, чтобы такие массовые обновления выполнялись как можно быстрее?

Например, в MySQL вы можете установить увеличенные буферы записи, отключить ведение журнала транзакций и приостановить очистку диска при фиксации транзакции. Есть ли что-то подобное в pgsql?

Среда развертывания - AWS EC2.

2 ответа

Решение

В руководстве есть глава, посвященная начальной загрузке базы данных.

Есть несколько безопасных опций, которые вы можете изменить, чтобы сделать вещи быстрее:

Тогда есть некоторые довольно небезопасные варианты, чтобы сделать вещи быстрее. Небезопасное значение: вы можете потерять все свои данные в случае сбоя сервера - так что используйте на свой страх и риск!

Опять же: изменив две настройки выше, вы рискуете потерять все свои данные.

Чтобы отключить WAL, вы также можете установить все таблицы на unlogged

Вы можете отключить ведение журнала WAL с ALTER TABLE ... SET UNLOGGED, но имейте в виду, что обратная операция выведет всю таблицу в WAL.

Если это невозможно, вы можете повысить производительность, установив max_wal_size Хью, так что вы получите меньше контрольно-пропускных пунктов.

Промывка WAL отключается настройкой fsync = off,

Помните, что первая и третья мера разрушат вашу базу данных в случае сбоя.

Другие вопросы по тегам