Я хочу загрузить огромное количество данных в PostgreSQL. Знаете ли вы какие-либо другие «трюки», кроме тех, которые упомянуты в документации PostgreSQL?Каков наилучший способ загрузки огромного количества данных в PostgreSQL?
Что я сделал до сих пор?
1) установить следующие параметры в postgresql.conf (64 ГБ ОЗУ):
shared_buffers = 26GB
work_mem=40GB
maintenance_work_mem = 10GB # min 1MB default: 16 MB
effective_cache_size = 48GB
max_wal_senders = 0 # max number of walsender processes
wal_level = minimal # minimal, archive, or hot_standby
synchronous_commit = off # apply when your system only load data (if there are other updates from clients it can result in data loss!)
archive_mode = off # allows archiving to be done
autovacuum = off # Enable autovacuum subprocess? 'on'
checkpoint_segments = 256 # in logfile segments, min 1, 16MB each; default = 3; 256 = write every 4 GB
checkpoint_timeout = 30min # range 30s-1h, default = 5min
checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0
checkpoint_warning = 0 # 0 disables, default = 30s
2) сделок (отключено) + автоматической фиксации установленного уровня изоляции (наименьший возможный: Многократное чтение) создать новую таблицу и загрузить в нее данные в той же транзакции.
3) установить COPY
команды для выполнения одной транзакции (предположительно это самый быстрый подход к COPY
данных)
5) отключен автовакууминг (не будет восстанавливаться статистические данные после того, как добавлены новые 50 строк)
6) FREEZE COPY FREEZE
не ускоряет сам импорт, но быстрее выполняет операции после импорта.
Есть ли у вас какие-либо другие рекомендации или, возможно, вы не согласны с вышеупомянутыми настройками?
Вы хотите, чтобы checkpoint_timeout запускал контрольно-пропускной пункт каждые 45 секунд? 30 минут (или что-то в этом роде) имеет больше смысла для меня. Но каково ваше определение «массивного объема данных»? –
Теперь я загружаю данные размером от 1 до 100 ГБ. Возможно, вы правы, что в этом случае тайм-аут контрольной точки должен быть увеличен. Время загрузки занимает больше 30 минут, поэтому я попытаюсь увеличить тайм-аут контрольной точки. Спасибо. – ady
Кстати, я бы не выключил авто вакуум, вы не можете включить его без простоя. Или вы запускаете свои собственные сценарии, чтобы делать вакуум и анализировать? –