【问题标题】:Local vs Heroku Postgres speed本地 vs Heroku Postgres 速度
【发布时间】:2012-09-14 01:38:11
【问题描述】:

我有一个本地数据库,其中包含大约 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 毫秒


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

【问题讨论】:

  • 如果你在 ssh 到服务器后进行查询,那么有问题,如果你从本地使用 psql 客户端,那么网络可能是主要原因

标签: postgresql heroku


【解决方案1】:

正如 Lukos 建议的那样,单行选择的 120-130 毫秒可能表示网络延迟,您可以通过在靠近数据库服务器的地方运行查询来减少这种延迟。然而,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,允许您为专用容量付费,从而进一步提高可预测性,但也增加了成本。

【讨论】:

    【解决方案2】:

    所以你问的是在线数据库服务是否可能比本地数据库慢?是的,当然它会更慢,它需要处理所有的网络延迟
    有没有一种简单的方法可以加快速度?除了像更快的网络链接和将办公室搬到 Heroku 数据中心隔壁这样显而易见的事情之外 - 没有

    【讨论】:

    • 所以上面的时间包括网络延迟,因此是不正确的。使用explain analyze 给出了服务器上的执行时间,这些数字与本地执行时间相当。谢谢!
    【解决方案3】:

    我在 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-11-09
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 2020-04-05
      • 1970-01-01
      • 2012-04-28
      • 2011-12-09
      相关资源
      最近更新 更多