PostgreSQL производительность INSERT INTO таблицы SELECT и COPY - PullRequest
4 голосов
/ 09 октября 2019

Я пытаюсь переместить средние объемы данных в PostgreSQL (от десятков до сотен миллионов строк).

При проектировании системы я пытаюсь понять: как производительностьINSERT INTO table(field1, field2) SELECT field1, field2 FORM other_table по сравнению с COPY FROM ... BINARY в PostgreSQL?

Я не могу найти какую-либо документацию, которая напрямую говорит на этот вопрос. Некоторые соображения, которые я вижу:

  • INTO INTO ... SELECT требует как чтения, так и записи с одного и того же диска.
  • COPY FROM ... BINARY требует либо клиента, который имеет данные, либо выполнения обходапоездка COPY TO ... по трубопроводу COPY FROM ...

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

1 Ответ

1 голос
/ 09 октября 2019

В конечном итоге на подобные вопросы можно ответить только тестами.

Но если вы хотите скопировать данные из одной таблицы в другую, INSERT ... SELECT ... должен работать лучше, поскольку не требует сохранения данных впромежуточный файл или соединение клиент-сервер.

Советы по скорости:

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

  • Убедитесь, что max_wal_size высокий.

Я бы VACUUM (FREEZE) новую таблицу впоследствии (что ненарушить нормальную работу на столе), чтобы в будущем авто-вакуум запускался без поворотов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...