Вставка данных во временные таблицы в PostgreSQL значительно медленнее по сравнению с Oracle - PullRequest
0 голосов
/ 17 ноября 2018

Наше приложение поддерживает несколько баз данных, включая 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? Пожалуйста, предложите.

1 Ответ

0 голосов
/ 17 ноября 2018

Вы не определили временную таблицу как проблему.

Например, ниже приведен быстрый тест вставки в 15 символ (конечно, не в байтах) varchar column

=> CREATE TEMP TABLE tt (vc varchar(15)); CREATE TABLE => \timing on Timing is on. => INSERT INTO tt SELECT to_char(i, '0000000000') FROM generate_series(1,100) i; INSERT 0 100 Time: 0.758 ms

Это на моем дешевом ноутбуке нескольких лет. Если вы не используете свою базу данных PostgreSQL на Raspberry Pi, тогда я не думаю, что скорость временных таблиц является для вас проблемой.

...