ActiveRecord:检查数据库调用的数量

时间:2017-04-17 17:03:16

标签: ruby-on-rails activerecord

出于演示目的,假设我有一个名为 constructor(private route: ActivatedRoute){} ngOnInit(){ this.route.params.subscribe(param => { let id = param["id"]; /// reload grid and charts... }) } 的类,其方法名为DemoThing

有没有办法(在代码中)我可以检查do_something点击数据库的次数?有没有办法可以“监视”活动记录以计算数据库被调用的次数?

例如:

do_something

3 个答案:

答案 0 :(得分:0)

ActiveRecord应该在STDOUT中记录每个查询。

但是对于上面的代码,很明显你为i的每次迭代进行了5次调用。

通过不将Ruby逻辑与查询混合,可以提高查询效率。

在此示例中,在查询之前获取ID将意味着不会为每个Ruby循环调用查询。

ids = 5.times.to_a
retVal = MyActiveRecordModel.where(id: ids) # .to_a if retVal needs to be an Array

答案 1 :(得分:0)

当然可以。但首先你必须了解Rails'查询缓存和记录器。默认情况下,Rails将尝试通过打开简单的查询缓存来优化性能。它是存储在当前线程上的哈希值(每个活动数据库连接一个 - 大多数rails进程只有一个)。无论何时生成select语句(如find或where等),相应的结果集都存储在一个散列中,该散列中包含用于查询它们作为键的SQL。当您运行上述方法时,您会注意到日志将显示Model Load语句,然后显示CACHE语句。您的数据库只被查询一次,其他4个通过缓存加载。在运行该查询时,请查看服务器日志。

答案 2 :(得分:-1)

我为查询计数https://github.com/comboy/sql_queries_count

找到了一个宝石