2017-07-27 45 views
0

我有3个查询运行速度非常慢。所有这些通常都是这样做的:从oracle的视图中选择(viw oracle_fdw扩展)。所有视图如下所示: select/parallel(table_Name,4)/column1,column2,从table_name替换(column 3,'',null),...,replace(...),column8。提高查询性能 - 从oracle选择数据到postgresql

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

的选择我运行PostgreSQL里的样子说:

select * from oracle_table1_view; 
  • table1的大小是10G与亿分的记录。

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

  • table3大小是8G与75,000,000记录。

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

约我的服务器的一些信息:

  • 我对服务器5 GB的RAM和4都是免费的。

  • 我有2个CPU

我的PostgreSQL实例的一些信息:

目前我对实例只有1分贝。

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

此外,我有很多来自foreign_Table的选择*。他们都花了一些时间,但是这三个都花费太多。请帮助提高这3项的表现,如果你能完成我所有的选择。

+0

你可以发布你的PostgreSQL服务器日志文件的摘录吗?这可能是有用的,看看你是否使用了很多临时文件,例如... – Arkhena

+0

它会有帮助如果我在运行查询后放入日志的所有内容?如果是:2017-07-27 16:05:13 IDT u postdbSTATEMENT:select * from foreign_table;我不想上传整个服务器日志。你能指导我搜索特定的信息吗? – Mariel

+0

我明白了。第一次日志记录设置:我认为你需要把检查点日志,所有临时文件(大小为0),lock_wait打开。然后,我想现在如果在运行查询时日志文件中存在错误或警告(例如检查点频繁执行)以及是否创建了临时文件(以及是否有多少以及哪个大小)。 – Arkhena

回答

1

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

如果不是,您必须解决Orace方面的问题。

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

EXPLAIN (VERBOSE) SELECT * FROM oracle_table1_view; 

检查,当你从SQLPLUS运行计划相匹配。如果没有,尝试找出差异并找出原因。

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

+0

查询需要时间在oracle方面,但他们没有被杀害。当我在psql中运行这些选择时,他们结束了,我看到Kill的提示。 – Mariel

+0

什么是“杀死提示”?你能详细解释一下吗?谁杀了什么? –

+0

服务器:[〜]:psql -d mydb -U user psql(9.5.7) 输入“help”即可获取帮助。 mydb => select * from remote_Table; Killed – Mariel