-1

我在我的 postgresql 数据库中使用 oracle_fdw 扩展。我正在尝试将 oracle 数据库中许多表的数据复制到我的 postgresql 表中。我通过运行来做到这一点insert into local_postgresql_temp select * from remote_oracle_table。此操作的性能非常缓慢,我尝试检查原因并选择其他替代方案。

1)第一种方法 -Insert into local_postgresql_table select * from remote_oracle_table这产生了 7 M/s 的总磁盘写入和 4 M/s(iotop)的实际磁盘写入。对于 32G 表,我花了 2 小时 30 分钟。

2)第二种方法 -copy (select * from oracle_remote_table) to /tmp/dump生成 4 M/s 的总磁盘写入和 100 K/s 的实际磁盘写入。复制实用程序假设非常快,但似乎非常慢。

-当我从本地转储运行复制时,读取速度非常快 300 M/s。

-我在oracle服务器上创建了一个32G的文件,用scp复制,花了我几分钟。

- wals 目录位于不同的文件系统上。我分配的参数:

min_parallel_relation_size = 200MB
max_parallel_workers_per_gather = 5 
max_worker_processes = 8 
effective_cache_size = 12GB
work_mem = 128MB
maintenance_work_mem = 4GB
shared_buffers = 2000MB
RAM : 16G
CPU CORES : 8

我怎样才能增加写入?如何更快地将数据从 oracle 数据库获取到我的 postgresql 数据库?

我在整个过程和结果上运行 perf: 在此处输入图像描述

4

1 回答 1

0

我会专注于你说的速度很快。

-我在oracle服务器上创建了一个32G的文件,用scp复制,花了我几分钟。

-当我从本地转储运行复制时,读取速度非常快 300 M/s。

我建议你把这两个结合起来。使用转储工具(或 SQLPLUS)将数据从 Oracle 导出到 Postgresql 的 COPY 命令可以读取的文件中。您可以直接生成二进制文件格式,但它有点棘手,但生成 CSV 分隔版本等应该不会太棘手。一个示例是如何使用 SQLPLUS 假脱机到 CSV 格式的文件?

于 2017-08-20T19:36:17.043 回答