LINUX.ORG.RU

Оптимизация запросов INSERT в PostgreSQL

 


1

3

День добрый.

Может кто-нибудь сможет рассказать, и конкретно показать, как можно оптимизировать INSERT-запросы в PostgreSQL.

Сейчас имею таблицу (и около 10 партиционных для неё таблиц). Никаких ключей и индексов в таблице нет. Первые 5-10 тысяч записей писались со скоростью ~350 з/с. На данный момент, когда в таблице около 50 тысяч записей, скорость ~50 з/с.

Из настроек, в конфиге, выключен autovacuum и fsync. Что еще можно сделать?

★★★

Ответ на: комментарий от disarmer

это если единовременно вставлять кучу строк. Еще в этом случае можно отключить autocommit, например так:

my $dbh=DBI->connect("dbi:Pg:dbname=disarmer;host=/tmp/", "", "",'AutoCommit'=>0});

Если же данные вставляются по одной строке то можно выключить синхронный коммит (есть ненулевой шанс потерять вставляемые данные при сбое):

SET synchronous_commit TO OFF
Но если fsync уже выключен то наверное не ускорит

disarmer ★★★
()
Ответ на: комментарий от disarmer

Поддерживаю. Сами переехали на этот механизм. Создается COPY TO запрос из порядка тысячи записей и посылается на сервер. Результат на порядки быстрее. В самих таблицах записей больше миллиона

vega
()

Вставка пакетная, т.е. вставка идет специальным процессом или вы про вставку, которая инициируется внешними событиями (типа http запроса)? Есть-ли какие-то тригеры на вставку кроме распределения по партициям?

Если пакетная и используется автокоммит, настоятельно рекомендую его отключить и использовать коммит на каждые, например, 1000 записей.

Если вставка по внешним событиям - рекомендую произвести оптимизацию настроек postgres (в сети есть много рекомендаций на этот счет).

UncleAndy ★★★
()
Последнее исправление: UncleAndy (всего исправлений: 1)

synchronous_commit обычно очень сильно ускоряет. Еще посмотри что бы OIDS были выключены на всякий случай.

dizza ★★★★★
()
Ответ на: комментарий от disarmer

Может вам подойдет COPY вместо INSERT? это намного быстрее

Спасибо! Миллион записей за 45 секунд. Отлично!

VirRaa ★★★
() автор топика
Ответ на: комментарий от VirRaa

Не за что)

Проверьте производительность со включенным fsync, не рекомендуют отключать в последних версиях, мол опасно

disarmer ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.