调整参数后,将数据加载到Postgres RDS仍然很慢

时间:2017-10-05 17:01:38

标签: postgresql amazon-web-services rds

我们已经创建了一个具有200GB存储空间(预配置IOPS)的RDS postgres实例(m4.xlarge)。我们正在尝试使用DataStage将数据从公司数据集市上传到RDS中的23个表。但是上传速度很慢。加载400K记录大约需要6个小时。

然后我开始根据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 /秒。这个值是否正常?我还能做些什么来加快数据传输速度吗?

1 个答案:

答案 0 :(得分:1)

在Postgresql中,您将不得不为每个写入的插入语句等待一次完整的往返(延迟)。此延迟是数据库一直到加载数据的机器之间的延迟。

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

  1. 对于初学者,您可以将原始数据加载到EC2实例并从那里开始导入,但是,除非可以直接在ec2实例上加载,否则您可能无法使用dataStage工具。 / p>

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

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