Наше приложение поддерживает несколько баз данных, включая Oracle и PostgreSQL. В нескольких случаях используется несколько запросов для получения необходимых данных. Данные, полученные из одного или нескольких запросов, фильтруются на основе бизнес-логики, а затем отфильтрованные данные вставляются во временную таблицу с помощью параметризованного оператора INSERT. Эта временная таблица затем объединяется с другими таблицами в последующем запросе. Мы заметили, что время, необходимое для вставки данных во временную таблицу, линейно увеличивается с количеством строк, вставленных в базу данных PostgreSQL. Эта временная таблица имеет только один столбец varchar размером 15 байт. Вставка 80 строк занимает 16 мс, 160 строк - 32 мс, 280 строк - 63 мс и т. Д. Те же самые операции с базой данных Oracle занимают около 1 мс для этих вставок.
Мы используем PostgreSQL 10.4 с драйвером psqlODBC версии 10.03. Мы настроили параметры temp_buffers (256 МБ), shared_buffers (8 ГБ), work_mem (128 МБ) и maintenance_work_mem (512 МБ) на основе рекомендаций, приведенных в документации PostgreSQL.
Существуют ли какие-либо другие параметры конфигурации, которые мы могли бы попытаться улучшить производительность вставок временных таблиц в базе данных PostgreSQL? Пожалуйста, предложите.