Улучшить производительность запросов - выбор данных из оракула в postgresql

У меня 3 запроса, которые выполняются очень медленно. Все они делают то же самое в общем: выберите из представления в oracle (расширение viw oracle_fdw). Все представления выглядят так: выберите /параллельный (имя_таблицы, 4)/ столбец1, столбец2, замените (столбец 3,' ', ноль),..., замените (...), столбец8 из таблицы_имя.

* У меня есть более 40 столбцов для каждой таблицы, поэтому я только что упомянул формат запроса.

выборки, которые я запускаю в postgresql, выглядят так:

select * from oracle_table1_view;
  • Размер таблицы 1 составляет 10 ГБ с 100 000 000 записей.

  • Размер таблицы 2 составляет 1,3 ГБ с 6 000 000 записей.

  • Размер table3 составляет 8G с 75000000 записей.

Все это происходит как часть большой функции, которая получает данные из базы данных Oracle. Перед импортом данных в локальные таблицы в postgresql я удаляю индексы и ограничения локальных таблиц, а после импорта данных создаю их.

Некоторая информация о моем сервере:

  • У меня 5 ГБ оперативной памяти на сервере и 4 свободны.

  • У меня 2 процессора

Некоторая информация о моем экземпляре Postgresql:

В настоящее время у меня есть только 1 дБ на экземпляр.

shared_buffers = 1000MB
effective_cache_size = 2GB
autovacuum = on
work_mem = 4MB

Более того, у меня много отборов * из foreign_Table. Все они занимают какое-то время, а те 3 - слишком много. Пожалуйста, помогите улучшить производительность этих 3 и, если вы можете из всех моих избранных.

1 ответ

Решение

Запросы выполняются быстро, когда вы выполняете их с помощью sqlplus?

Если нет, то вы должны решить проблему на стороне Orace.

Чтобы увидеть план выполнения Oracle, используемый oracle_fdw, запустите

EXPLAIN (VERBOSE) SELECT * FROM oracle_table1_view;

Проверьте, соответствует ли это плану при запуске из sqlplus. Если нет, попробуйте определить разницу и выяснить, почему.

Если план выглядит одинаково, но время выполнения отличается, возможно, вы выбрали несколько столбцов больших объектов. Предварительная выборка строк не работает, если задействованы такие столбцы, поэтому для каждой выбранной строки будет один и тот же обход от PostgreSQL до Oracle, что может существенно замедлить работу.

Другие вопросы по тегам