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