2013-08-14 28 views
7

Jak uzyskać czas wykonywania zapytania SQL w szynach? mogę zobaczyć czas w postaci kłód, np .:Czas wykonania instrukcji ActiveRecord

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

Ale jak mogę uzyskać tę wartość (10,08) programowo go używać dalej w moim kodu?

+0

Co masz na myśli, mówiąc: "uzyskaj ten numer w moim kodzie?" – Mohamad

+0

Potrzebuję programowo wiedzieć, jak szybko moja baza danych wstawia nowy rekord. W moim przykładzie pokazuje 10.8 ms, aby wykonać kwerendę sql (faktycznie w moim przykładzie nie wstawia wartości ..). Potrzebuję więc znaleźć sposób na zdobycie tej wartości i dalsze wykorzystanie w moim kodzie. –

Odpowiedz

16

Można użyć ActiveSupport::Notifications pobrać runtime SQL

powinien być w stanie instrumentu sql.active_record aby zobaczyć, jak długo połączenie SQL odbywa

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 

Ten kod nie został przetestowany, więc nie mogę zagwarantować, że działa, ale powinien być

+1

Czy możesz odpowiedzieć trochę wcześniej? Spędziłem około 2 godzin na kopaniu szyn, aby dowiedzieć się, jak to działa :) i doszłam do tego samego rozwiązania. W każdym razie, dzięki! –

1

to wypróbować

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

Próbowałem, ale wydaje się, że to pokazuje czas, aby wykonać ruby ​​w bloku, w tym wszystkie rzeczy activerecord i arel ... Ale potrzebuję czasu na dokładne wykonanie kwerendy sql. Muszę wiedzieć, jak szybko moja baza danych wstawia nowy rekord, a nie ActiveRecord. –

Powiązane problemy