我发现bullet gem是一个非常有用的工具,用于在Rails应用程序中捕获慢速数据库查询。是否有updateAction()
/ Ecto
的类似工具可以帮助您通知N + 1和其他慢查询?
答案 0 :(得分:6)
N+1
查询不会发生在Ecto
。
必须使用preload
在查询中显式加载Ecto关联如果您尝试访问尚未加载的关联,它将是Ecto.Association.NotLoaded的实例
对于其他慢查询,您可以将自定义记录器添加到ecto:
config :my_app, MyApp.Repo,
adapter: Ecto.Adapters.Postgres,
url: {:system, "DATABASE_URL"},
loggers: [{Ecto.LogEntry, :log, []}, {MyApp.CustomLogger, :log, []}]
自定义记录器:
defmodule MyApp.CustomLogger do
def log(entry) do
if (entry.query_time > 1000_000) do
Logger.info("Slow!!!!: #{entry.query}")
end
end
end
答案 1 :(得分:0)
我可以推荐你自己的宝石ecto_profiler