rad*_*und 5 sqlite profiling ruby-on-rails
我试图找出我的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'
Run Code Online (Sandbox Code Playgroud)
每次向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 仅在服务器启动时进行此查找。