使用rails_reviewer优化Rails数据库查询性能
最近在做的一个项目遇到严重的性能问题,主要是数据库查询过多,同事向我推荐了rails_reviewer 插件,它是我的前同事(不确定我进公司时他还在不在) David Stevenson 写的一个帮助你优化SQL查询的插件,它可以帮助你定位数据库查询的瓶颈所在,从而通过编制索引已经缓存关键变量来改进性能。
rails_reviewer的安装很简单:
$ script/plugin install git://github.com/dsboulder/query_reviewer.git
$ rake query_reviewer:setup
现在重启服务器,你就会在屏幕的左上角看到一个小窗口,点击这个窗口,就会显示加载当前页面的所有SQL查询,并且会告诉你那些是没问题的,那些是需要优化的,如下图:
可以看到,在优化前这个请求执行了1101条SQL查询,并且大部分都是没有cache的,你可以通过rails_reviewer查看每条查询的 SQL语 句以及代码的调用栈,优化主要从两方面进行,一个是提高查询性能,这个可以通过添加索引,另一个就是减少查询数量,这个可以通过缓存变量,比如:
def production(name)
@production_cache ||= {}
@production_cache[name] ||= buildings.map{|b| b.production(name)}.sum
end
下面是优化后的结果,可以看到,优化后查询数从1101变成了94,时间则从800多毫秒减到了59毫秒,大约只有原来的10分之一不到:
Add star Share Share with note Email