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ą :)
Łukasz Surdacki

Łukasz Surdacki Pl/SQL and C#
developer, Team
Leader

Temat: Czas wykonywania zapytania

może tak:

declare
vSTART TIMESTAMP;
vSTOP TIMESTAMP;
test numeric;
begin
vSTART := SYSDATE;
SELECT 1 into test FROM DUAL;
vSTOP := SYSDATE;
DBMS_OUTPUT.PUT_LINE(vSTOP-vSTART);
end;
Kamil Stawiarski

Kamil Stawiarski Oracle Certified
Master | Oracle ACE

Temat: Czas wykonywania zapytania

Grzegorz,
Jeśli chcesz zastosować twarde parsowanie (czyli liczenie planów za każdym razem), wystarczy że będziesz wykonywał zapytanie o innej treści (z komentarzem, innym aliasem tabeli itp) - dzięki temu za każdym razem będziesz miał inne SQL_ID.

Potem możesz zobaczyć statystyki zapytania w V$SQL (np. ELAPSED_TIME będziesz czasem w mikrosekundach). Podzielone przez EXECUTIONS da Ci średni czas wykonania na pojedyncze wykonanie.

Oczywiście w Twoim przypadku chcesz zmierzyć pojedyncze wykonania więc EXECUTIONS będzie zawsze wynosiło 1. Pytanie brzmi - czy chcesz mierzyć też wydajność zapytania z odczytami fizycznymi z dysków...?

No i czemu akurat chcesz mieć wynik zawsze z twardym parsowaniem? Idea jest taka, że produkcyjnie mają się odbywać parsowania miękkie lub w ogóle ma nie być parsowań.

Pozdrawiam!
Kamil.



Wyślij zaproszenie do