提高查询性能 - 从oracle选择数据到postgresql
我有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项的表现,如果你能完成我所有的选择。
使用sqlplus执行查询时查询是否运行得很快?
如果不是,您必须解决Orace方面的问题。
要查看oracle_fdw使用的Oracle执行计划,运行
EXPLAIN (VERBOSE) SELECT * FROM oracle_table1_view;
检查,当你从SQLPLUS运行计划相匹配。如果没有,尝试找出差异并找出原因。
如果计划看起来相同,但执行时间不同,那可能是您选择了一些LOB列。如果涉及这样的列,行预取不起作用,因此每个选定的行都会有一次从PostgreSQL到Oracle的往返行程,这会使事情变得非常缓慢。
你可以发布你的PostgreSQL服务器日志文件的摘录吗?这可能是有用的,看看你是否使用了很多临时文件,例如... – Arkhena
它会有帮助如果我在运行查询后放入日志的所有内容?如果是:2017-07-27 16:05:13 IDT u postdbSTATEMENT:select * from foreign_table;我不想上传整个服务器日志。你能指导我搜索特定的信息吗? – Mariel
我明白了。第一次日志记录设置:我认为你需要把检查点日志,所有临时文件(大小为0),lock_wait打开。然后,我想现在如果在运行查询时日志文件中存在错误或警告(例如检查点频繁执行)以及是否创建了临时文件(以及是否有多少以及哪个大小)。 – Arkhena