2017-06-22 1 views

Répondre

6

N+1 Les requêtes ne se produisent pas dans Ecto.

associations Ecto doivent être explicitement chargés dans la requête en utilisant preload

Si vous essayez d'accéder à une association qui n'a pas encore été chargé, ce sera une instance de Ecto.Association.NotLoaded

Comme pour les autres requêtes lentes, vous pouvez ajouter un enregistreur personnalisé à ecto:

config :my_app, MyApp.Repo, 
    adapter: Ecto.Adapters.Postgres, 
    url: {:system, "DATABASE_URL"}, 
    loggers: [{Ecto.LogEntry, :log, []}, {MyApp.CustomLogger, :log, []}] 

enregistreur personnalisé:

defmodule MyApp.CustomLogger do 
    def log(entry) do 
    if (entry.query_time > 1000_000) do 
     Logger.info("Slow!!!!: #{entry.query}") 
    end 
    end 
end 
0

je peux vous recommander mon bijou ecto_profiler

+0

Bien que ce lien peut répondre à la question, il est préférable d'inclure les éléments essentiels de la réponse ici et de fournir le lien de référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [À revoir] (/ review/low-quality-posts/18634357) –

+0

@JessBowers Comment puis-je inclure les parties essentielles de la gemme grande et épaisse? neurodynamique demande un analogue de balle !! Ne fait pas partie du code! C'est de mauvaise qualité et irresponsable Review –

+0

Ouais je vois ce que tu veux dire. Mais si vous pensez que c'est une mauvaise question pour SO (une «question shopping» qui ne correspond pas vraiment aux règles de SO pour les bonnes questions), dans ce cas, ne répondez pas, votez la question vers le bas. Ou essayez d'éditer le Q pour le rendre meilleur. J'essaie seulement de vous aider à utiliser le site, je n'essaie pas d'offenser - et je ne suis qu'un électeur. –