2013-08-14 1 views
7

Comment puis-je obtenir l'heure d'exécution de la requête SQL dans les rails? Je peux voir le temps dans les journaux, par exemple .:Temps d'exécution SQL ActiveRecord

Posting Load (10.8ms) SELECT "postings".* FROM "postings" ORDER BY "postings"."id" ASC LIMIT 1 

Mais comment puis-je obtenir cette valeur (10,08) pour l'utiliser par programme plus loin dans mon code?

+0

Que voulez-vous dire par «obtenir ce numéro dans mon code? – Mohamad

+0

J'ai besoin d'un programme pour savoir à quelle vitesse ma base de données insère un nouvel enregistrement. Dans mon exemple, il affiche 10,8 ms pour exécuter la requête sql (en fait, dans mon exemple, il n'insère pas de valeur ..). J'ai donc besoin de trouver un moyen d'obtenir cette valeur et d'utiliser plus loin dans mon code. –

Répondre

16

Vous pouvez utiliser ActiveSupport::Notifications pour récupérer le temps d'exécution des instructions SQL

Vous devriez être en mesure de l'instrument sql.active_record pour voir combien de temps l'appel SQL prend

ActiveSupport::Notifications.subscribe('sql.active_record') do |*args| 
    event = ActiveSupport::Notifications::Event.new(*args) 
    event.duration #how long it took to run the sql command 
end 

Ce code n'a pas été testé, donc je ne peux pas garantir qu'il fonctionne, mais il devrait

+1

Pourriez-vous répondre un peu plus tôt? J'ai passé environ 2 heures à creuser des rails pour savoir comment ça marche :) et je suis arrivé à la même solution. En tout cas, merci! –

1

essayer cela

time_consumed = Benchmark.measure { Post.limit(1) } 
+2

J'ai essayé mais on dirait que cela montre le temps d'exécuter un ruby ​​dans le bloc, y compris tous les éléments d'activation et d'arec d'activation ... Mais j'ai besoin de temps pour l'exécution exacte de la requête sql. J'ai besoin de savoir à quelle vitesse ma base de données insère un nouvel enregistrement, pas ActiveRecord. –