Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 9.6从远程oracle db写入数据速度较慢_Oracle_Postgresql_Performance_Oracle Fdw - Fatal编程技术网

Postgresql 9.6从远程oracle db写入数据速度较慢

Postgresql 9.6从远程oracle db写入数据速度较慢,oracle,postgresql,performance,oracle-fdw,Oracle,Postgresql,Performance,Oracle Fdw,我在postgresql数据库中使用oracle_fdw扩展。我正在尝试将oracle数据库中许多表的数据复制到我的postgresql表中。我是通过从远程oracle表运行insert到本地的postgresql临时select*来实现的。这个操作的性能非常慢,我试着检查原因,mybe选择了不同的替代方案 1第一种方法-在本地\u postgresql\u表中插入从远程\u oracle\u表中选择*这将生成7 M/s的总磁盘写入和4 M/s的实际磁盘写入。对于32G的桌子,我花了2小时30分

我在postgresql数据库中使用oracle_fdw扩展。我正在尝试将oracle数据库中许多表的数据复制到我的postgresql表中。我是通过从远程oracle表运行insert到本地的postgresql临时select*来实现的。这个操作的性能非常慢,我试着检查原因,mybe选择了不同的替代方案

1第一种方法-在本地\u postgresql\u表中插入从远程\u oracle\u表中选择*这将生成7 M/s的总磁盘写入和4 M/s的实际磁盘写入。对于32G的桌子,我花了2小时30分钟

2第二种方法-将select*从oracle_remote_表复制到/tmp/dump会生成4 M/s的总磁盘写入和100 K/s的实际磁盘写入。复制实用程序应该很快,但似乎很慢

-当我从本地转储运行copy时,读取速度非常快,为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,结果如下:

我会把注意力集中在你说的速度快的地方

-我在oracle服务器上创建了一个32G文件,并使用scp进行复制,这花了我几分钟的时间

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


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

我不能这样做,因为数据的导入是大型postgresql事务的一部分。Oracle表中有LOB列吗?没有,我没有任何LOB列。如果选择速度慢,请尝试使用外部表的prefetch选项。我不能确定,但如果您发布的内容包含所有重要内容,看起来时间要么花在Oracle服务器上,要么花在网络上。由于使用预回迁并没有改变任何事情,我怀疑问题出在oracle_fdw之外。调优Oracle超出了我的能力范围。对于psql,您不能使用单行模式。但无论如何,我们已经偏离了这个问题。