Temat: Czas wykonania zapytania na bazie danych Oracle

Witam,

z poziomu Javy połączyłam się do bazy Oracle przez JDBC. Wykonałam proste zapytanie: SELECT * FROM DUAL.
Chcę zmierzyć czas wykonania tego polecenia. Czy w tym przypadku powinnam użyć funkcji getTimeInMillis() (dla obiektu Calendar)?
Funkcję tą powinnam umieścić przed poleceniem executeQuery i po tym poleceniu, a następnie odjąć czas pobrany na początku od czasu końcowego?
Czy takie rozwiązanie jest poprawne?


Pozdrawiam,
Małgorzata

konto usunięte

Temat: Czas wykonania zapytania na bazie danych Oracle

Takie rozwiazanie (czy tez po prostu poprzez klase Date i funkcje getTime) jest jaknajbardziej poprawne. Aczkolwiek należy sobie zdać sprawę, że nie będzie to czas wykonanania zapytania w bazie. Bedzie to raczej czas tego zapytania + czas wyslania, odebrania zadania do bazy plus pewnie jeszcze kilka innych czynnikow.

Temat: Czas wykonania zapytania na bazie danych Oracle

To w jaki sposób mierzyć czas wykonania tylko tego zapytania?

Chcę także sprawdzić ile czasu będzie się wykonywać zapytanie jeśli będzie wykonywane przez więcej niż innego użytkownika. I tu będzie trzeba posłużyć się wątkami, by symulować, że zapytanie wykonywane jest równolegle?
Michał M.

Michał M. konsultant IT

Temat: Czas wykonania zapytania na bazie danych Oracle

Jeśli jest to Oracle to sugerowałbym skorzystać z narzędzi do monitorowania tej bazy, które takie coś umożliwiają.

konto usunięte

Temat: Czas wykonania zapytania na bazie danych Oracle

Małgorzata Bąba:
To w jaki sposób mierzyć czas wykonania tylko tego zapytania?

Chcę także sprawdzić ile czasu będzie się wykonywać zapytanie jeśli będzie wykonywane przez więcej niż innego użytkownika. I tu będzie trzeba posłużyć się wątkami, by symulować, że zapytanie wykonywane jest równolegle?

Wszystko zalezy od tego co to za aplikacja, czy J2EE czy moze zwyczajna J2SE (gdzie uzytkownicy lacza sie np. poprzez jakies sockety do serwera, ktory komunikuje sie z BD). Po drugie warto pamietac, o cache'owaniu pewnych wartosci (nawet suchy JDBC chyba cos takiego robi w pewnym stopniu), zatem pierwsze zadanie do bazy moze trwac dluzej a kolejne tylko chwilke.

Jesli chodzi o sam fakt mierzenie czasu odpowiedzi to nie jestem pewien czy takowy istnieje, takie rzeczy raczej trzeba by bylo mierzyc juz z poziomu bazy danych (tak jak zasugerowal Michał). Aczkolwiek w 99.999% przypadkow programistą chodzi nie tylko o czas wykonywania zapytania po stronie bazy danych, ale calkowity czas (wyslanie zadania, odpowiedz), zatem pytanie o ktora z tych wersji tobie chodzi.Tomasz Stachlewski edytował(a) ten post dnia 09.05.10 o godzinie 16:05

Temat: Czas wykonania zapytania na bazie danych Oracle

Dziękuję za wszelkie podpowiedzi/wskazówki.
Czas wykonywania zapytań na bazie można mierzyć w JMeter (narzędzie do testów wydajnościowych).
Ale chciałam napisać prosty program w Javie :)
Chcę badać czas od momentu wysłania żądania do momentu uzyskania odpowiedzi.
I napisałam:

t1= c.getTimeInMillis();
ResultSet rset =
stmt.executeQuery("select * from dual");
t2= c.getTimeInMillis();
time = t2 - t1;

konto usunięte

Temat: Czas wykonania zapytania na bazie danych Oracle

Prawdopodobnie to rozwiązanie nie da dobrych wyników - ze względu na "rozdzielczość" funkcji getTimeInMilis(). Różni się ona w zależności od systemu, o ile pamiętam pod windowsem wynosi 3ms.

Druga sprawa, to fakt, że jeśli zapytanie trwa krócej niż te 3ms, wówczas albo będzie trwało 0ms albo 3ms.

Sugeruję użycie System.nanoTime(), który daje dużo większą precyzję.
Piotr B.

Piotr B. Handlarz też
człowiek

Temat: Czas wykonania zapytania na bazie danych Oracle

Małgorzata Bąba:
To w jaki sposób mierzyć czas wykonania tylko tego zapytania?

Chcę także sprawdzić ile czasu będzie się wykonywać zapytanie jeśli będzie wykonywane przez więcej niż innego użytkownika. I tu będzie trzeba posłużyć się wątkami, by symulować, że zapytanie wykonywane jest równolegle?

1. Foglight
2. Banchmark Factory for Databases.

Temat: Czas wykonania zapytania na bazie danych Oracle

Dziękuję Wam serdecznie za podpowiedzi/sugestie :)

Następna dyskusja:

Timeout przy wykonywaniu za...




Wyślij zaproszenie do