代码之家  ›  专栏  ›  技术社区  ›  ddd

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

  •  0
  • ddd  · 技术社区  · 7 年前

    我们创建了一个RDS postgres实例(m4.xlarge),具有200GB的存储空间(配置的IOPS)。我们正在尝试使用DataStage将数据从公司数据集市上传到RDS中的23个表。然而上传速度相当慢。加载40万条记录大约需要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/s。这个值正常吗?我还能做些什么来加速数据传输吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Joe Love    7 年前

    在Postgresql中,您必须为编写的每个insert语句等待1个完整的往返(延迟)。此延迟是从数据库一直到加载数据的机器之间的延迟。

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

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

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

    3. 禁用数据压缩,并确保已尽一切努力最小化两个端点之间的延迟。