繁体   English   中英

我怎样才能弄清楚在我的rails应用程序中生成所有这些额外的sqlite3选择的位置?

[英]How can I figure out where all these extra sqlite3 selects are being generated in my rails app?

我试图找出我的rails应用程序生成一堆额外查询的位置。 我需要一些关于如何解决它的想法。 或者,如果有人能给我一些提示,我将不胜感激。

我得到这些:

  SQL (1.0ms)    SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'

  SQL (0.8ms)    SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'

  SQL (0.8ms)    SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'

每次向DB请求时反复重复(单次请求多达70次)

我尝试安装一个跟踪查询源的插件,但它确实没有任何帮助。 我正在使用hobofields gem,dunno如果这就是它正在做的事情但我现在有点坚持它

有关追捕这些额外查询来源的任何提示?

看看第173行的connection_adapters / sqlite_adapter.rb中的ActiveRecord gem(我使用的是ActiveRecord 3.0.7),你有一个名为tables的函数,它可以生成你发布的确切查询:

SELECT name FROM sqlite_master WHERE type = 'table' AND NOT name = 'sqlite_sequence'

在开发模式下,每次请求都会为数据库中的每个表调用此函数。 在生产中,当服务器启动时,此函数仅被调用一次,并且结果被缓存。


在开发每个请求时,rails会查看您的数据库以查看每个表具有哪些列,以便它可以在您的模型上生成方法,如“find_by_name”。 由于生产中数据库不太可能更改,因此rails仅在服务器启动时执行此查找。

如果不查看“守则”,就很难说清楚这一点。

但我相信你会在某个循环中编写查询

for i in 0..70
  SqliteMaster.find(:all, :conditions=>["type=? and not name=?", 'table', 'sqlite_sequesnce'])
end

所以我的建议是检查在请求某个方法后调用的所有方法,并查看是否在循环中调用了查询。

当我使用元搜索gem进行搜索时,我刚刚看到这个出现在我的日志中,但仅限于开发模式。

我认为它是由插件acts-as-taggable-on

它将检查表或缓存列是否存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM