Optymalizator Kosztowy I Plan Zapytania. Co To Takiego?

Optymalizator kosztowy jest częścią SZBD (Systemu Zarządzania Bazą Danych) i służy do tworzenia planu wykonania zapytania. Od wersji 10g wyliczanie planu zapytania odbywa się w tle i choć dzieje się to bez ingerencji programisty/użytkownika, to istnieje możliwość wpływania na jego decyzyjność.

Plan zapytania to nic innego jak zbiór operacji, które są koniczne do wykonania zapytania SQL. Im lepiej dobrany plan zapytania tym szybciej wyniki zostaną zwrócone.

Na pracę optymalizatora kosztowego wpływa wiele czynników, które można modyfikować pod konkretne zapotrzebowanie. Do takich zaliczają się te bezpośrednio wpięte w bazę danych jak:

  • parametry startowe instancji
    • OPTIMIZER_FEATURES_ENABLE – umożliwia ustawienie kompilatora tak, aby jego zachowanie było zgodne z poprzednimi wersjami np 9iR2
    • DB_FILE_MULTIBLOCK_READ_COUNT – określa ile bloków będzie odczytywanych w pojedynczej opracji I/O w przypadku Full Table Scan
    • PGA_AGGREGATE_TARGET – określa wartość obszaru PGA, w którym to realizowane są sortowania i złączenia Hash Join
    • OPTIMIZER_MODE – określa, czy podejście optymalizatora będzie nakierowane na jak najszybsze zwrócenie pojedynczego rekordu (FIRST_ROWS), czy wszystkich rekordów (ALL_ROWS)
  • informacje w słowniku danych
  • statystyki obiektowe i systemowe

i te, które wynikają bezpośrednio z samego zapytania SQL

  • wskazówki optymalizatora
  • warunki w klauzuli WHERE
  • kolejność tabeli w klauzuli FROM

Mając informację o powyższych elementach optymalizator kosztowy tworzy kilka planów wykonania i wybiera ten, który wg niego jest najbardziej efektywny. Aby optymalizator mógł określić, który plan jest tym najbardziej oczekiwanym korzysta z poniższych miar:

  • cardinality (liczebość) – to miara, która określa ilość rekordów przechowywanych w tabeli
  • selectivity (selektywność) – to miara, która mówi optymalizatorowi, ile rekordów z całości zostanie zwróconych. Bazuje na zawężeniu w klauzuli WHERE.
  • cost (koszt) – to miara, która określa ile zasobów potrzeba do wykonania zapytania bazując na planie wykonania. Mowa o czasie dostępu do dysków, użycie procesora, użycie pamięci itp. Na koszt składa się wieć wiele elementów.

Wszystkie powyższe miary bazują na zebranych statystykach. Jeżeli ich nie ma, to optymalizator bazuje na domyślnych wartościach, bądź też automatycznym próbkowaniu. W jednym i drugim przypadku wybrany plan zapytania może okazać się niewydajny, więc dobrą praktyką jest zbieranie i odświeżanie statystyk.

Szymon

Komentarze |0|

Legenda *) Pola oznaczone gwiazdką są wymagane
**) Możesz używać tych znaczników i atrybutów HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>