在我们当前的应用程序中,我们将日常备份添加到我们的s3存储桶中。这些备份是每天和每个表格的CSV格式。
我们的要求是从s3导入某个日期范围的数据,假设我们需要查看2015年1月1日到2015年7月31日的数据,我们将数据从s3下载到ec2实例并导入到新创建的postgres DB
但随着时间的推移,进口变得非常缓慢。以下是我在导入过程中执行的步骤:
使用COPY命令导入。
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分钟(我比较2个不同日期的同一个表的文件大小)。
我尝试将文件拆分为较小的块并进行导入,但没有看到导入时间的任何改进。
我从RDS监测中观察到的是,交换空间从0增加到50 ......不知道这是否正常。任何改进导入的输入都会有所帮助。
提前致谢。
[PS:所有步骤都在shell命令中]
答案 0 :(得分:0)
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#USER_PIOPS
请求的IOPS速率与存储量的比率 分配很重要,取决于您的数据库引擎。对于 例如,对于Oracle,比率应该在1:1和50:1之间。您可以 首先配置一个具有1,000 IOPS和200的Oracle数据库实例 GiB存储(比例为5:1)。然后,您可以使用扩展到2,000 IOPS 200 GiB的存储空间(比例为10:1)。您可以扩展到30,000 IOPS 存储量为6 TiB(6144 GiB)(比例为5:1),您可以进行缩放 必要时进一步提升。
Postgres具有相同的比率(1:50),iops也不是字节ps,它的操作,所以当你给8K piops时,它不是每秒8KB或MB。我建议你将piops增加到40K,导入数据然后减少它。