调试rails控制器进行太多查询

时间:2009-04-30 19:06:29

标签: ruby-on-rails ruby debugging logging

我有一个大约3岁的rails应用程序,我的页面出现问题时遇到问题。每个加载的页面都有几行,如下所示:

ReqTdsLink Columns (1.0ms)   SHOW FIELDS FROM `req_tds_links`

什么样的方法调用会在日志中导致此输出?我在应用程序控制器中找不到任何可能导致此问题的过滤器或其他任何内容,但我还没有检查所有视图(数量上是天文数字)我希望之前有特定要查找的内容我开始手动扫描每个文件以查找可能导致此问题的内容。

感谢,

-C

4 个答案:

答案 0 :(得分:2)

您是在开发或生产模式下运行吗?

正如您所指出的,

SHOW FIELDS FROM foo由您的模型完成,因此它知道要生成哪些访问器方法。

在开发模式下,每次请求都会执行此操作,因此您不需要经常重新加载Web服务器,但在生产模式下,即使您运行的是三年前版本的Rails,也应缓存此信息。 / p>

答案 1 :(得分:1)

ActiveRecord从数据库中读取模型的属性。它不会在生产中多次发生,但在开发模式下,Rails每次都会查询表,以了解可能发生的任何更改。

答案 2 :(得分:1)

如果您再次遇到此类问题并需要跟踪查询的调用方式,我建议使用查询跟踪插件:http://github.com/ntalbott/query_trace/tree/master。它为每个SQL查询添加了一个堆栈跟踪到日志。非常方便。

答案 3 :(得分:0)

这一行实际上来自调用模型,我在应用程序控制器中有一个看起来像[Model1,Model2,Model3]的数组,我把它改成看起来像['Model1','Model2','Model3']并修复了所有额外的电话。