2017-10-05 122 views
0

我们创建了一个具有200GB存储空间(Provisioned IOPS)的RDS postgres实例(m4.xlarge)。我们正尝试使用DataStage将数据从公司数据集市上传到RDS中的23个表。然而,上传速度很慢。加载400K记录大约需要6个小时。调整参数后,将数据加载到Postgres RDS的速度仍然很慢

然后,我开始根据Best Practices for Working with PostgreSQL调整以下参数:

比这些
autovacuum 0 
checkpoint_completion_target 0.9 
checkpoint_timeout 3600 
maintenance_work_mem {DBInstanceClassMemory/16384} 
max_wal_size 3145728 
synchronous_commit off 

其他,我也被关闭multi AZ和备份。尽管启用了SSL,但不确定这会改变任何事情。但毕竟改变了,仍然没有太大的改善。 DataStage正在并行上传数据〜12个线程。写入IOPS约为40 /秒。这个值是否正常?还有什么我可以做的,以加快数据传输?

+0

您的RDS实例是可公开访问的吗?它是通过NAT还是其他网络瓶颈(代理,VPN等) –

+0

还有一件事..你有一堆索引仍然启用?另外,你的数据有多大(meg,而不是行) –

+0

@JoeLove实例可公开访问,无需代理或vpn等。总数据大约为50GB。大约10GB数据在5个小时内被加载。 – ddd

回答

1

在Postgresql中,您将不得不等待写入每个插入语句的整个往返行程(延迟)。这种延迟是数据库到加载数据的机器之间的延迟时间。

在AWS中,您有许多选项可以提高性能。

  1. 对于初学者来说,可以加载你的原始数据到一个EC2实例,并从那里开始导入,但是,您可能无法使用您的DataStage工具,除非它可以直接在EC2实例来加载。

  2. 您可以将dataStage配置为使用批处理,其中每个插入语句实际上包含许多行。通常,越快,越快。

  3. 禁用数据压缩并确保您已尽全力将两个端点之间的延迟降至最低。