调整参数后将数据加载到 Postgres RDS 仍然很慢
Loading data to Postgres RDS is still slow after tuning parameters
我们已经创建了一个具有 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/秒。这个值正常吗?我还能做些什么来加快数据传输速度吗?
在 Postgresql 中,您将不得不为每个写入的插入语句等待 1 个完整的往返(延迟)。此延迟是从数据库一直到从中加载数据的机器之间的延迟。
在 AWS 中,您有很多选项可以提高性能。
对于初学者,您可以将原始数据加载到 EC2 实例上并从那里开始导入,但是,您可能无法使用 dataStage 工具,除非它可以直接加载到ec2实例。
您可以将dataStage配置为使用批处理,其中每个插入语句实际上包含很多行。通常,越多,速度越快。
禁用数据压缩并确保您已尽一切努力最大程度地减少两个端点之间的延迟。
我们已经创建了一个具有 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/秒。这个值正常吗?我还能做些什么来加快数据传输速度吗?
在 Postgresql 中,您将不得不为每个写入的插入语句等待 1 个完整的往返(延迟)。此延迟是从数据库一直到从中加载数据的机器之间的延迟。
在 AWS 中,您有很多选项可以提高性能。
对于初学者,您可以将原始数据加载到 EC2 实例上并从那里开始导入,但是,您可能无法使用 dataStage 工具,除非它可以直接加载到ec2实例。
您可以将dataStage配置为使用批处理,其中每个插入语句实际上包含很多行。通常,越多,速度越快。
禁用数据压缩并确保您已尽一切努力最大程度地减少两个端点之间的延迟。