Grzegorz Staśkowiak

Grzegorz Staśkowiak Programista Oracle
PL/SQL

Temat: Czas wykonywania zapytania

Witam serdecznie,
mam 2 pytania:
1. Gdzie w bazie Oracle znajdę czas wykonywania zapytania ?
Nie chodzi mi o czas wyświetlany w SQL Developerze itp., ponieważ jest on nie miarodajny.
Chodzi o to, że muszę porówanać czasowo 2 zapytania zwracające ten sam wynik, ale o innej budowie lub wykonanie tego samego zapytania dwukrotnie, z indeksem lub bez.

2. Jak wiemy przy pierwszym wykonaniu zapytania, optymalizator wykonuje różne rzeczy np. wybiera właściwy plan wykonania. Moje pytanie, czy istnieje możliwość wyczyszczenia powiedzmy planów zapytań? Problem związany z tym, że muszę wykonać kilkarotnie to samo zapytanie, ale tak jakby było wykonywane pierwszy raz na bazie danych.
Chodzi mi o sposób, który bedzie można zastosować bez potrzeby restaru serwera, lub wypełnienie buffora po wyczyszczeniu shered poola .

Proszę o pomoc. :)
Jeśli coś jest niejasne, to proszę o komentarz. W odpoiwedzi będę starał się uszczegółowić zagadnienie.
Bardzo dziękuje wszystkim, którzy pomogą :)
Andrzej P.

Andrzej P. Oracle Database
Consultant

Temat: Czas wykonywania zapytania

Najlepiej zacząć od planu zapytania :).
Temat jest wg mnie za długi na to forum, podam więc wersję uproszczoną do czyszczenia buforów:

alter system flush buffer_cache;
alter system flush shared_pool;


Wykonaj to np. kilka razy z rzędu, może uzyskasz przybliżone wyniki. W dokumentacji zerknij też na uwagi do tych poleceń, bo nie czyszczą całości.
Nie wiem jak bardzo skomplikowane zapytania testujesz i której wersji Oracle używasz, ale zwróć uwagę, że przy testowaniu zapytań trwających np. sekundę możesz uzyskać różne wyniki.

Temat: Czas wykonywania zapytania

1. Gdzie w bazie Oracle znajdę czas wykonywania zapytania ?
Nie chodzi mi o czas wyświetlany w SQL Developerze itp., ponieważ jest on nie miarodajny.
Chodzi o to, że muszę porówanać czasowo 2 zapytania zwracające ten sam wynik, ale o innej budowie lub wykonanie tego samego zapytania dwukrotnie, z indeksem lub bez.

A dlaczego nie jest miarodajny?
W sqlplusie ustaw sobie "set timing on" i będziesz miał czas wykonania.Ten post został edytowany przez Autora dnia 21.04.16 o godzinie 08:29
Grzegorz Staśkowiak

Grzegorz Staśkowiak Programista Oracle
PL/SQL

Temat: Czas wykonywania zapytania

Andrzej P.:
Najlepiej zacząć od planu zapytania :).
Temat jest wg mnie za długi na to forum, podam więc wersję uproszczoną do czyszczenia buforów:

alter system flush buffer_cache;
alter system flush shared_pool;


Wykonaj to np. kilka razy z rzędu, może uzyskasz przybliżone wyniki. W dokumentacji zerknij też na uwagi do tych poleceń, bo nie czyszczą całości.
Nie wiem jak bardzo skomplikowane zapytania testujesz i której wersji Oracle używasz, ale zwróć uwagę, że przy testowaniu zapytań trwających np. sekundę możesz uzyskać różne wyniki.

Czyszczenie buffer_cache,shared_pool nie daje od razu efektu. Musisz wykonać reset serwera albo przeładować buffory nowymi zapytaniami. Ja potrzebuje coś błyskawicznego :)
Andrzej P.

Andrzej P. Oracle Database
Consultant

Temat: Czas wykonywania zapytania

Uruchom to kilka razy, tak jak pisałem.
Podaj też proszę, na jakiej bazie danych pracujesz, bo dochodzisz do interesujących wniosków.

konto usunięte

Temat: Czas wykonywania zapytania

Zapoznaj się z Runstats Utility.

http://appsdba.com/techinfo/runstats.htm
Kamil Stawiarski

Kamil Stawiarski Oracle Certified
Master | Oracle ACE

Temat: Czas wykonywania zapytania

Grzegorz S.:
Andrzej P.:
Najlepiej zacząć od planu zapytania :).
Temat jest wg mnie za długi na to forum, podam więc wersję uproszczoną do czyszczenia buforów:

alter system flush buffer_cache;
alter system flush shared_pool;


Wykonaj to np. kilka razy z rzędu, może uzyskasz przybliżone wyniki. W dokumentacji zerknij też na uwagi do tych poleceń, bo nie czyszczą całości.
Nie wiem jak bardzo skomplikowane zapytania testujesz i której wersji Oracle używasz, ale zwróć uwagę, że przy testowaniu zapytań trwających np. sekundę możesz uzyskać różne wyniki.

Czyszczenie buffer_cache,shared_pool nie daje od razu efektu. Musisz wykonać reset serwera albo przeładować buffory nowymi zapytaniami. Ja potrzebuje coś błyskawicznego :)

Daje efekt. Natychmiastowy. Bufory zostają wyczyszczone. Zakładam, że Twój problem jest z dyrektywami SQL, które mogą nie znikać po standardowym wyczyszczeniu shared_pool.

Buffer cache zawsze będzie wyczyszczony natychmiast.

Następna dyskusja:

Wydajność zapytania




Wyślij zaproszenie do