Uruchamiania zapytania - kroki

  • Sprawdzenie składni (SYNTAX)
  • Sprawdzenie obiektów (SEMANTIC)
  • Sprawdzenie uprawnień (PRIVILEGE)
  • Alokowanie zapytania w PSA (Private SQL Area)
  • Odpytanie czy istnieje zapytanie w PSA (TAK - uruchomienie zapytania (soft parse), NIE - zapytanie jest alokowane, optymalizowane i dopiero po wszystkim uruchamiane (hard parse))

Etapy działania optymalizatora

  • Query Transformer - zmienia zapytania na wydajniejsze bez zmiany logicznego sensu
  • Estymator - wykorzystuje statystyki, próbuje wygenerować maksymalną ilość planów wykonania zapytania
  • Plan generator - tworzy plany wykonania zapytania działając wspólnie z estymatorem
  • RSC (Row source generator) - wybiera najlepszy plan i go wykonuje. Otrzymujemy w nim zestaw wierszy (tabele, widoki), tworzy drzewo źródeł z informacjami o porządku wykonania, metodach dostepu i połączeń, operatorach.

Selektywność = ilość wierszy / całkowita ilośc wierszy
Kardynalnośc (liczebność) = selektywność * całkowita liczba wierszy. Kardynalność służy do określania kosztów filtrów, sortowania i joinów
Powyższe parametry wpływają na estymację kosztów I/O i sortowania

Selektywność jest zapisywana w statystykach. Jeśli ich nie mamy to obliczana jest nastepująco:

  • Dla jednej kolumny selektywność = 1/num_distinct
  • Dla większej ilości kolumn jest to iloczyn wartości 1/num_distinct

Wartości num_distinct otrzymać możemy z poniższego zapytania

select
column_name,
num_distinct from dba_tab_columns
where table_name = 'DEPARTMENTS'

Koszt - określa szacunkowa liczba odczytów I/O wymaganą do realizacji zapytania
Koszt = (odczyt pojedynczego bloku + odczyt wielu bloków + koszt CPU) / średni czas odczytu pojedynczego bloku

Tags: