2013-02-03 41 views
1

我们以前使用过Heroku Basic数据库,但发现我们网站上涉及重型数据库查询的操作非常缓慢。我们3天前升级到了Heroku Crane数据库,希望它能帮助解决这个问题。但是,查询看起来一样慢。即使连续执行两次相同的操作似乎也很慢,但由于高速缓存的原因,我预计它会很快。尽管Heroku数据库缓存,为什么我们的Rails数据库查询速度很慢?

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

谢谢。

回答

4

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

一般来说,Postgres会缓存从磁盘中提取的底层表数据,因此您至少需要对它进行一次操作才能将其加载到内存中。但是,如果您正在执行复杂的查询,缓存数据将无法为您带来太多的收益,有时Rails无法将足够的工作委托给数据库,从而导致您的应用程序CPU受限并且您的数据库未充分利用。

我会深入优化您的查询和索引,让Postgres更好地发挥它的魔力。您可以从运行EXPLAINEXPLAIN ANALYZE开始,找出查询的哪一部分需要很长时间。

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

使用EXPLAIN在轨道的一个例子:Understanding how to optimize a query via the Postgres/rails explain data