1

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

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

谢谢。

4

2 回答 2

4

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

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

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

优化数据库使用的好资源:http ://www.freebsddiary.org/postgresql-analyze.php和http://wiki.postgresql.org/wiki/Performance_Optimization

在 Rails 中使用 EXPLAIN 的示例:了解如何通过 Postgres/rails 解释数据优化查询

于 2013-02-03T21:29:54.317 回答
0

with that small of a database, you should not see any performance issues. I would profile the app and tease out the slow parts, as I recommend here: Rails Performance Tuning for Production?

于 2013-02-05T19:14:44.390 回答