【发布时间】:2017-06-22 02:44:49
【问题描述】:
我发现bullet gem 是一个非常有用的工具,可以在 Rails 应用程序中捕获慢速数据库查询。 Ecto/Phoenix 是否有类似的工具可以帮助通知您 N+1 和其他慢查询?
【问题讨论】:
标签: ruby-on-rails elixir phoenix-framework ecto
我发现bullet gem 是一个非常有用的工具,可以在 Rails 应用程序中捕获慢速数据库查询。 Ecto/Phoenix 是否有类似的工具可以帮助通知您 N+1 和其他慢查询?
【问题讨论】:
标签: ruby-on-rails elixir phoenix-framework ecto
N+1 查询不会发生在 Ecto 中。
必须使用 preload 在查询中显式加载 Ecto 关联
如果您尝试访问尚未加载的关联,它将是Ecto.Association.NotLoaded 的实例
至于其他慢查询,可以在ecto中添加自定义logger:
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
【讨论】:
我可以向你推荐我自己的宝石ecto_profiler
【讨论】: