Optymalizacja

Transkrypt

Optymalizacja
Wykład XII
Optymalizacja
wyznaczenie spośród dopuszczalnych rozwiązań danego problemu,
rozwiązania najlepszego ze względu na przyjęte kryterium jakości ( np. koszt,
zysk, niezawodność )
optymalizacja w relacyjnych bazach danych
•
•
•
•
•
wybór wydajnej strategii obliczania wyrażenia relacyjnego
konieczna w systemach relacyjnych
możliwa jest automatyczna optymalizacja w systemach relacyjnych
" ręczna" optymalizacja w systemach nierelacyjnych
optymalizacja w systemach bazodanowych to nie tylko optymalizacja zapytań
Zalety automatycznego optymalizatora ( dla programisty )
•
•
•
•
posiada więcej informacji o aktualnym stanie bazy danych
przeprowadza reoptymalizację
może rozważyć więcej strategii optymalizacyjnych w krótszym czasie
udostępnia w tani i wydajny sposób szeroki zestaw funkcjonalności
przykład:
podaj nazwy Dostawców dostarczających część AZ234
tabela Dostawcy (100 wierszy )
id_dostawcy
nazwa
adres
9191
MaxBuild
Słowackiego 5, Kraków
10115
CorpExport
Matejki 12, Warszawa
...
...
...
tabela Dostawy ( 10000 wierszy )
nr_dostawy
id_dostawcy
id_czesci
...
0003
9191
HOM89
...
0005
10115
AZ234
...
...
...
...
...
SELECT nazwa FROM dostawy JOIN dostawcy USING (id dostawcy)
WHERE id_czesci = 'AZ234' ;
wyrażenie algebry relacyjnej:
1
Wykład XII
warunek złączenia:
Bez optymalizacji:
1.
2.
3.
złączenie tabel dostawy i dostawcy ( odczyt dla każdej dostawy tabeli
dostawcy )
restrykcja wyniku kroku pierwszego do wierszy z częścią o nazwie AZ234
rzutowanie wyniku kroku 2 na atrybut nazwa
Z optymalizacją:
1.
2.
3.
restrykcja tabeli dostaw do wierszy z częścią o nazwie AZ234 ( wczytanie
tabeli dostaw)
złączenie tabeli wynikowej z kroku pierwszego i tabeli dostawcy
rzutowanie wyniku kroku 2 na atrybut nazwa
Formy optymalizacji:
•
•
•
•
statyczna ( polega na znalezieniu najlepszego „ planu wykonania zapytania,
przed rozpoczęciem wykonywania zapytania. W trakcie realizacji zapytania
plan wykonania nie ulega już zmianie )
dynamiczna ( bardziej kosztowna )
pojedynczego zapytania ( systemy komercyjne zapewniają jedynie
optymalizację pojedyńczego zapytania )
zbioru zapytań
Popularne metody optymalizacji
•
•
•
•
•
•
metody dotyczące fizycznej organizacji danych
metody oparte na przepisywaniu
metody wykorzystujące wyspecjalizowane algorytmy dla niektórych
operatorów
metody wybierające najtańszy plan realizacji zapytania
zapamiętywanie wyników poprzednio wyliczonych zadań
równoległe wykonywanie zapytań
Fazy przetwarzania zapytania
•
•
•
•
dekompozycja zapytania
optymalizacja zapytania ( transformacja, uproszczenie i wybór optymalnego
planu wykonania – z wykorzystaniem statystyk bazy danych )
generowanie kodu
wykonanie zapytania
2
Wykład XII
Etapy optymalizacji
•
•
•
•
transformacja zapytania do postaci wewnętrznej – dekompozycja do postaci
wyrażenia algebry relacyjnej
wybór kandydatów do procedur niskiego poziomu
tworzenie planów realizacji zapytania
wybór najtańszego rozwiązania
Transformacja
składowe transformacji:
•
•
•
•
•
analiza zapytania
normalizacja zapytania
analiza semantyczna zapytania
upraszczanie zapytania
restrukturyzacja zapytania
Analiza syntaktyczna
•
•
•
analiza poprawności syntaktycznej
weryfikacja poprawności atrybutów i relacji
budowa drzewa logicznego
3
Wykład XII
Normalizacja zapytania
celem tego etapu jest przekształcenie wewnętrznej reprezentacji zapytania do
znormalizowanej postaci koniunkcyjnej lub dysjunkcyjnej.
( dowolny predykat w SQL można przekształcić do jednej z dwóch postaci )
przykład:
postać koniunkcyjna:
( id_czesci = AZ234 ٨ id_dostawcy = 9191 ) ٧ id_czesci = AZ235
do
( id_czesci = AZ234 ٧ id_czesci = AZ235 ) ٨ ( id_dostawcy = 9191 ٧ id_czesci = AZ235 )
postać dysjunkcyjna
( id_czesci = AZ234 ٧ id_czesci = AZ235 ) ٨ id_dostawcy = 9191
do
( id_czesci = AZ234 ٨ id_dostawcy = 9191 ) ٧ ( id_czesci = AZ235 ٨ id_dostawcy = 9191 )
Analiza semantyczna
•
•
•
odrzucenie niepoprawnie sformułowanych lub sprzecznych warunków ( zawsze
zwracających wartość FALSE
algorytmy oceny poprawności semantycznej istnieją jedynie dla zapytań nie
zawierających dysjunkcji i negacji
algorytmy te opierają działanie na grafie połączeń relacji i grafie połączeń
atrybutów
Upraszczanie zapytania
•
•
•
identyfikacja i eliminacja wyrażeń nadmiarowych
eliminacja wspólnych podwyrażeń
zastosowanie reguł algebry relacyjnej
Wykład XII
p ٨
(p) = p
p ٧ (p) = p
p ٨ (false) = false
p ٧ false = p
p ٨ (true) = p
p ٧ true = true
p ٨ (า p) = false
p ٨(p٧q)=p
p ٧ (า p) = true
p ٧(p ٨q)=p
Przepisywanie zapytań
- użycie transformacji algebraicznych w celu uzyskania " lepszego " planu
wykonania
przepisywanie zapytań realizuje się dla:
•
•
•
podzapytań
agregacji
połączeń
przykłady:
SELECT id_czesci FROM dostawy WHERE id_dostawcy IN
( SELECT id_dostawcy FROM dostawcy
WHERE adres LIKE '%KRAKÓW%'
AND stan_mag - dostawy.sprzedano > 1000) ;
SELECT id_czesci FROM dostawy JOIN dostawcy USING (id_dostawcy)
WHERE adres LIKE '%KRAKÓW%' AND stan_mag - sprzedano > 1000;
SELECT rok, count(*) FROM studenci
GROUP BY rok, Extract(MONTH FROM data_urodzenia)
HAVING Extract( MONTH FROM data_urodzenia) = 5;
SELECT rok, count(*) FROM studenci
WHERE Extract(MONTH FROM data_urodzenia) = 5
GROUP BY rok;
SELECT nazwisko, imiona FROM studenci JOIN wyniki_zaliczen
ON (nr_albumu = nr_indeksu)
WHERE rok=2 AND gr_dziekan = 1 AND kolokwium1 > 4;
5
Wykład XII
Realizacja złączeń
złączenia są jednym z istotnych czynników wpływających na wydajność w
relacyjnych bazach danych. Nie zawsze przepisywanie złączeń przyniesie lepszy
efekt.
Dla złączeń stosuje się specjalne algorytmy, np:
•
•
•
nested-loop
sort-merge
hash-join
Nested-loop
- metoda polegająca na przejściu po kolei przez wszystkie wiersze pierwszej
z łączonych tabel (tzw. tabeli zewnętrznej), dla każdego odczytanego wiersza
następuje porównanie z wszystkimi wierszami drugiej tabeli ( tabeli wewnętrznej).
Wiersze spełniające warunek złączenia są konkatenowane i zwracane jako wynik .
Algorytm jest korzystny dla małych tabel zewnętrznych i tabel wewnętrznych
zaopatrzonych w indeks na kolumnie złączenia.
Sort_merge
- metoda polegająca na posortowaniu wszystkich wierszy obu łączonych
tabel względem kolumn użytych w warunku złączenia, a następnie równoległym
przechodzeniu przez poszczegółne wiersze i dopasowywaniu ich do siebie. Wiersze
spełniające warunek złączenia są konkatenowane i zwracane jako wynik.
Metoda ta jest stosowana przez system Oracle jedynie dla połączeń równościowych.
Hash-join
- algorytm wykorzystuje funkcję haszującą, przechodzi przez wszystkie
wiersze obu tabel. Pierwsze przejście buduje tablicę haszowania dla tabeli
zewnętrznej na kolumnie złączenia ( elementy tej tablicy zawierają wartości
kolumny złączenia i wskaźnik do wiersza, w którym wartość się znajduje).
Drugie przejście stosuje funkcję haszującą dla kolumny złączenia w tabeli
wewnętrznej i sprawdza czy jej wartość koliduje z już zapisanymi wartościami
(czyli czy wartości się pokrywają).Wiersze spełniające warunek złączenia są
konkatenowane i zwracane jako wynik.
Algorytm nie wymaga sortowania, korzystny dla dużych tabel.
Wykład XII
Szacowanie kosztu
dla każdego planu zapytania szacowany jest:
•
koszt wykonania każdego operatora w planie zapytania
•
rozmiar wyniku wykonania każdego operatora
Statystyki
na etapie wyboru procedur niskiego poziomu i tworzenia planów realizacji zapytania
wykorzystywane są statystyki prowadzone przez system baz danych. Są to dla:
tabel (liczebność, liczba stron, itp)
kolumn ( liczba różnych wartości w kolumnie, liczba wystąpień NULL, rozkład
danych )
•
indeksów ( wysokośc, maksymalna i minimalna wartość klucz indeksu )
Niektóre systemy przechowują histogramy wartości atrybutów.
•
•
Optymalizacja
•
•
•
proces doboru odpowiednich struktur danych, metod dostępu i operacji w celu
zminimalizowania kosztu realizacji polecenia SQL
wykonywana przez wyspecjalizowany moduł SZBD- optymalizator poleceń
rodzaje:
regułowa:
•
oparta na rankingu metod dostępu do struktur danych
•
obecnie niestosowana
kosztowa
oparta na szacowaniu kosztu wykonania wszystkich potencjalnych
sposobów wykonania polecenia SQL ( wybiera najtańszy,
wykorzystuje statystyki )
przykład:
SELECT nazwisko,stanowisko,placa,siedziba FROM pracownicy JOIN dzialy
USING(id_dzialu) WHERE siedziba like '%R%' ;
wykorzystano materiały:
wykłady Bazy Danych - 2012 roku - dr inż. Siedlecka-Lamch
http://wazniak.mimuw.edu.pl/images/c/c7/BD-2st-1.2-w12.tresc-1.1.pdf

Podobne dokumenty