提高查询性能 - 从oracle选择数据到postgresql

时间:2017-07-27 12:57:49

标签: oracle postgresql database-performance oracle-fdw

我有3个运行速度非常慢的查询。所有这些都在做同样的事情:从oracle中的视图中选择(viw oracle_fdw扩展名)。所有观点看起来都是这样的: select / parallel(table_Name,4) / column1,column2,replace(column 3,'',null),...,replace(...),column8 from table_name。

*每个表都有40多列,所以我刚才提到了查询的格式。

我在postgresql中运行的选项看起来像这样:

select * from oracle_table1_view;
  • table1大小为10G,有100,000,000条记录。

  • table2大小为1.3G,有6,000,000条记录。

  • table3大小为8G,有75,000,000条记录。

所有这些都是从oracle db获取数据的大函数的一部分。在将数据导入postgresql中的本地表之前,我删除索引和本地表的约束,并在导入数据后创建它们。

有关我的服务器的一些信息:

  • 我在服务器上有5 GB RAM,4个是免费的。

  • 我有2个cpus

有关我的Postgresql实例的一些信息:

目前我在实例上只有1个数据库。

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

此外,我有很多来自foreign_Table的选择*。他们所有人都花了一些时间,但这3人花了太多时间。请帮助改善那些3的表现,如果你能选择的话。

1 个答案:

答案 0 :(得分:2)

使用sqlplus执行查询时,查询是否运行得很快?

如果没有,你必须在Orace方面解决问题。

要查看oracle_fdw使用的Oracle执行计划,请运行

EXPLAIN (VERBOSE) SELECT * FROM oracle_table1_view;

从sqlplus运行时检查是否与计划匹配。如果没有,请尝试发现差异,找出原因。

如果计划看起来相同,但执行时间不同,则可能是您选择了一些LOB列。如果涉及这些列,则行预取不起作用,因此对于每个选定的行,从PostgreSQL到Oracle将有一次往返,这可能会使事情变得非常缓慢。

相关问题