我们之前使用的是Heroku Basic数据库,但发现我们网站上涉及繁重数据库查询的操作非常慢。我们在3天前升级到Heroku Crane数据库,希望它能帮助解决这个问题。然而,查询似乎同样慢。即使在一行中运行两次相同的操作看起来也很慢,而我预计由于缓存,它会很快。
我们的数据库大小只有15.4MB,而我们使用的Crane数据库提供了400MB的缓存。从理论上讲,似乎可以缓存整个数据库,从而提供非常快速的查询处理。应该是这样吗?我们如何着手解决或排除问题?此外,缓存磁盘是基于块还是基于查询(即,我们是否必须运行完全相同的查询两次才能从缓存中获益?)
谢谢。
发布于 2013-02-04 05:29:54
仅供参考,我在Heroku Postgres团队工作。
一般而言,Postgres将缓存从磁盘中提取的底层表数据,因此您至少需要对其进行一次操作才能将其加载到内存中。但是,如果您正在执行复杂的查询,缓存数据不会给您带来那么多,有时Rails无法将足够的工作委托给数据库,从而使您的应用程序CPU受限,而数据库未得到充分利用。
我会深入研究优化您的查询和索引,让Postgres更好地发挥它的魔力。您可以从运行EXPLAIN和EXPLAIN ANALYZE开始,找出查询的哪个部分花费了很长时间。
优化数据库使用的好资源:http://www.freebsddiary.org/postgresql-analyze.php和http://wiki.postgresql.org/wiki/Performance_Optimization
在rails中使用EXPLAIN的一个示例:Understanding how to optimize a query via the Postgres/rails explain data
发布于 2013-02-06 03:14:44
对于这么小的数据库,您应该不会看到任何性能问题。我会分析这个应用程序,并梳理出缓慢的部分,就像我在这里建议的那样:Rails Performance Tuning for Production?
https://stackoverflow.com/questions/14676409
复制相似问题