为什么我们的Rails数据库查询在Heroku数据库缓存的情况下会变慢?

时间:2013-02-03 19:35:06

标签: ruby-on-rails ruby-on-rails-3 heroku rails-activerecord

我们之前使用过Heroku Basic数据库,但发现我们网站上涉及大量数据库查询的操作非常慢。我们3天前升级到Heroku Crane数据库,希望能帮助解决这个问题。但是,查询看起来同样缓慢。即使连续两次运行相同的操作似乎也很慢,而我认为由于缓存它会很快。

我们的数据库大小只有15.4MB,而我们使用的Crane数据库提供了400MB的缓存。理论上,似乎可以缓存整个数据库,从而提供非常快速的查询处理。应该是这样的吗?我们如何解决问题或解决问题?此外,是基于块的缓存磁盘,还是基于查询(即,为了从缓存中受益,我们是否必须运行两次完全相同的查询?)

感谢。

2 个答案:

答案 0 :(得分:4)

仅供参考我在Heroku Postgres团队工作。

通常,Postgres会缓存它从磁盘中提取的基础表数据,因此您必须至少对其进行一次操作才能将其加载到内存中。但是,如果您正在进行复杂的查询,缓存数据将无法获得那么多,有时Rails无法将足够的工作委托给数据库,从而使应用程序CPU受限并且数据库未被充分利用。

我会深入研究优化您的查询和索引,让Postgres更好地发挥其魔力。您可以先运行EXPLAINEXPLAIN ANALYZE来确定查询的哪些部分需要很长时间。

优化数据库使用情况的良好资源:http://www.freebsddiary.org/postgresql-analyze.phphttp://wiki.postgresql.org/wiki/Performance_Optimization

在rails中使用EXPLAIN的示例:Understanding how to optimize a query via the Postgres/rails explain data

答案 1 :(得分:0)

使用那么小的数据库,您不应该看到任何性能问题。 我会描述应用程序并梳理出缓慢的部分,我在这里推荐: Rails Performance Tuning for Production?