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

标签 oracle postgresql database-performance oracle-fdw

我有 3 个运行非常慢的查询。一般来说,所有这些都在做同样的事情:从 oracle 中的 View 中选择(viw oracle_fdw 扩展名)。所有的观点都是这样的: 选择/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 数据库获取数据的大函数的一部分发生的。在将数据导入 postgresql 中的本地表之前,我删除了本地表的索引和约束,并在导入数据后创建了它们。

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

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

  • 我有2个cpu

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

目前我在实例上只有 1 db。

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

另外,我有很多selects * from foreign_Table。所有这些都需要一些时间,但那 3 个花费的时间太多了。请帮助提高这 3 个的性能,如果可以的话,请提高我的所有选择。

最佳答案

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

如果不行,就得在Orace端解决问题。

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

EXPLAIN (VERBOSE) SELECT * FROM oracle_table1_view;

从 sqlplus 运行时检查它是否与计划相匹配。如果不是,请尝试找出差异并找出原因。

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

关于oracle - 提高查询性能——从oracle中选择数据到postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45351502/

相关文章:

mysql - MySQL 中的解耦表能提高多少性能?

php - 为什么从 utf8 更改为 utf8mb4 会降低我的数据库速度?

sql - 'greater than' 查询的索引

oracle - 在 Oracle => 符号用于

sql - 在 Oracle 中 - ALTER TABLE 我可以级联数据类型更改吗?

c - 获取 libpq-fe 中字段的大小

Oracle Scheduler – 使用单个作业创建复杂的计划

postgresql - 如何在安装时修复 Rust 柴油 cli 链接 libpq.lib 错误

sql - Postgresql INSERT RETURNING 复杂类型

MySQL |正则表达式 VS 喜欢