使用RDS中的postgresql数据库表现不佳

时间:2018-03-19 16:28:44

标签: postgresql amazon-web-services amazon-ec2 dplyr rds

我在尝试检索存储在RDS amazon实例中的一小部分数据库表时遇到问题。

使用R,从EC2实例,我使用dplyr包将多个数据帧导出到RDS数据库。这是通过运行循环,将数据附加到存储在RDS实例中的大表(200 GiB)来完成的:

dbWriteTable(conn, value = df, name = "oco2v8", append = TRUE)

然后,我打开一个postgresql连接,创建一个tbl,然后进行一些过滤:

conn1 = dbConnect(PostgreSQL(), 
                 host="XXXXXXXXXXXXXXXXX.amazonaws.com", 
                 port=5432,
                 user="XXXX",
                 password="XXXXX",
                 dbname="oco2v8")
oco2data <- tbl(conn1, my_table_name)
filtered <- filter(oco2data, latitude > 92 & latitude < 98 & longitude > 34 & longitude < 40 & xco2_quality_flag == 0)

过滤所需的时间比预期的要长,通常是几分钟。当我使用collect()命令将子集数据导入我的R环境时,更大的问题就开始了。

my_df <- filtered %>% collect()

长时间后,该命令最终完成了工作,但我不明白为什么它非常慢,因为子集数据大约为600kb。

RDS实例规范如下:
   - 类型:db.t2.medium,Micro Instance - Current Generation
   - 记忆:4 GiB
   - CPU虚拟核心数:2个vCPU
   - EBS优化:没有    - 网络性能:中等    - EC2和RDS实例都托管在美国东部(俄亥俄州)地区。

我试图将内存和网络性能提高到最高,将多AZ参数更改为是,通过psql命令行工作并通过我的本地计算机工作 - 没有解决问题。此外,我尝试更改连接到RDS实例的E​​C2实例的规范。

这种表现不佳的原因是什么? 有人有通过EC2使用RDS实例的经验吗? collect()命令有替代方法吗?

非常感谢任何帮助!
谢谢,
DOR

0 个答案:

没有答案