本地vs Heroku Postgres速度

时间:2012-09-21 15:43:00

标签: postgresql heroku

我有一个带有单个表的本地数据库,该表有大约550万条记录。我在Heroku Postgres上创建了一个新数据库(基本计划),并将本地转储恢复到其中。启动psql并进行一些查询我注意到速度明显低于本地速度。然后,我使用Crane计划配置了另一个数据库,数字同样不好。

这里有一些数字:


select count(*) from table;
当地:1216.744毫秒 Heroku(基础):4697.073 ms
Heroku(Crane):2972.302 ms


select column from table where id = 123456;
当地:0.249毫秒
Heroku(基础):127.557 ms
Heroku(Crane):137.617 ms


这些巨大的差异怎么可能?这可能与硬件差异完全相关吗?有没有简单的方法来提高吞吐量?

3 个答案:

答案 0 :(得分:6)

单行选择的120-130ms可能表示网络延迟,正如Lukos建议的那样,您可以通过在数据库服务器附近运行查询来减少这种情况。但是,2-3秒的延迟更可能与数据库速度有关 - 特别是I / O吞吐量。这就是为什么Heroku强调数据库产品的差异与缓存大小有关。

Heroku Postgres将您的数据存储在Amazon EBS。 (这在an incident report中有所体现,并且偶然也会解释1 TB的限制。)EBS表现有点像过山车;比本地磁盘更多。有些读取速度很快,而其他读取速度很慢。有时整个卷下降到100 KB / s,有时它会使互连最大化。

根据我在EC2中托管数据库的经验,我发现在EBS上运行RAID 10可以平滑性能差异。我不相信Heroku这样做,因为它会大大增加高于数据库计划价格点的成本。 AWS最近宣布provisioned IOPS for EBS允许您支付专用容量,进一步提高可预测性,但也增加了成本。

答案 1 :(得分:3)

所以你问在线数据库服务是否可能比本地数据库慢?是的,当然它会更慢,它具有处理的所有网络延迟 有没有一种简单的方法可以加快速度?除了显而易见的更快的网络链接和移动办公室与Heroku的数据中心隔壁 - 没有

答案 2 :(得分:0)

  

我在Heroku Postgres上创建了一个新的数据库(基本计划),并将本地转储恢复到其中。

看起来你正在同时玩不同的数据库。

select column from table where id = 123456;
Local: 0.249 ms
Heroku (Basic): 127.557 ms
Heroku (Crane): 137.617 ms

我非常怀疑你的Heroku应用程序和Heroku数据库不能托管在同一地区。两者都需要在美国或欧盟。