在当前的应用程序中,我们对s3桶进行了日间备份。这些备份以CSV格式每天和每个表进行。
我们的要求是从s3导入一些日期范围的数据,假设我们需要查看2015年1月1日至2015年7月31日的数据,我们从s3下载数据到out ec2实例并导入到新创建的postgres。
但随着时间的推移,进口变得极其缓慢。以下是导入期间所执行的步骤:
psql -h <HOST_NAME> -d <database_name> -U <user_name> -c "\COPY TABLE_NAME FROM '<exact_path_of_the_file>' CSV DELIMITER ',' HEADER"当导入启动时,它很容易在2分钟内消耗2GB的文件。但是,在导入数据一个月之后,导入变得非常缓慢。对于导入相同大小的文件,时间会增加到30分钟(我在比较两个不同日期相同表的文件大小)。
我尝试过将文件分割成更小的块并进行导入,但是没有看到导入时间上的任何改进。
我从RDS监控中观察到,交换空间从0增加到50.不知道这是否正常。任何改善进口的投入都是有帮助的。
提前谢谢。
PS:所有步骤都在命令中
发布于 2018-01-11 14:12:09
请求的IOPS速率与分配的存储量的比率非常重要,这取决于您的数据库引擎。例如,对于Oracle来说,比例应该在1:1到50:1之间。您可以从提供一个带有1,000 IOPS和200个GiB存储(比例为5:1)的Oracle实例开始。然后,您可以使用200 GiB的存储量(比为10:1),扩展到2,000 IOPS。您可以使用6 TiB (6144 GiB)的存储(比例为5:1)来扩展多达30,000 IOPS,并且在必要时可以进一步扩展。
Postgres有相同的比率(1:50),而且iops不是字节ps,它的操作,所以当你给8K管道,它不是8KB或MB每秒。我建议您将管道增加到40K,导入数据,然后再减少。
https://stackoverflow.com/questions/48180424
复制相似问题