PostgreSQL – быстрая вставка

В статье содержится информация для организации быстрой вставки в таблицы PG.

Быстрая вставка может потребоваться в самых разных случаях …

  • для сокращения времени транзакции.
  • для высоконагруженного решения.
  • для быстрого журналирования.

Вот несколько основных напоминаний, которые помогут оптимизировать вставку:

  • Минимизируйте использование индексов, триггеров, ограничений. Индексы будут особенно сильно влиять на скорость вставки.
  • Если значение индексируемого поля возрастает монотонно, то вместо B-tree используйте BRIN индекс.
  • Используйте максимально большой набор строк в одной операции INSERT или COPY.
  • Рассмотрите возможность параллельной вставки с помощью нескольких сессий.
  • Рассмотрите возможность поместить индекс в другое табличное пространство на отдельном диске.
  • Рассмотрите возможность отказаться от использования транзакций (CREATE UNLOGGED TABLE …).

Дополнительно можно задуматься об использовании быстрых дисков (SSD NVMe) и конвергентных архитектурах (например VSAN).

Если будете делать высоконагруженное решение с индексом B-tree, то обратите внимание на параметр shared_buffers. Как только индексы перестанут помещаться в RAM, скорость вставки катастрофически деградирует. В этом случае нужно будет увеличить размер shared_buffers или уменьшить количество строк, помещаемых в одну партицию.

Начать дискуссию