4

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

这里有一些数字:


select count(*) from table;
本地:1216.744 毫秒
Heroku(基本):4697.073 毫秒
Heroku(起重机):2972.302 毫秒


select column from table where id = 123456;
本地:0.249 毫秒
Heroku(基本):127.557 毫秒
Heroku(起重机):137.617 毫秒


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

4

3 回答 3

6

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

Heroku Postgres 将您的数据存储在Amazon EBS上。(这在事件报告中有所披露,并且顺便解释了 1 TB 的限制。) EBS 性能有点像过山车;比本地磁盘要多得多。一些读取可能很快,而另一些可能很慢。有时整个卷会下降到 100 KB/s,有时它会最大化互连。

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

于 2012-09-21T16:05:14.690 回答
3

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

于 2012-09-21T15:46:28.027 回答
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 DB 没有托管在同一区域。两者都需要在美国或欧盟。

于 2017-12-05T21:08:29.663 回答