Bazy danych
Transkrypt
Bazy danych
2011-01-20 PLAN WYKŁADU Pojęcie optymalizacji Etapy wykonywania zapytania Etapy optymalizacji Rodzaje optymalizacji Reguły transformacji Procedury implementacyjne Koszty BAZY DANYCH Wykład 11 dr inż. Agnieszka Bołtuć OPTYMALIZACJA ZAPYTAŃ Optymalizacją zapytania nazywamy wybór najlepszej spośród wielu możliwych strategii wykonania zapytania, Optymalizacja jest jednym z etapów przetwarzania zapytania, Poprzedzona jest odczytaniem, analizą składniową oraz weryfikacją zapytania, Nazwa optymalizacja jest nadana na wyrost, gdyż jesteśmy jedynie pewni że znaleziona strategia jest lepsza od wyjściowej, ale nie zawsze najlepsza. ETAPY PRZETWARZANIA ZAPYTANIA Zapytanie w języku wysokiego poziomu Odczyt, analiza składniowa i weryfikacja Zapytanie w postaci pośredniej Optymalizator zapytań Plan wykonania Generator kodu zapytań Kod wykonania zapytania Wykonawczy procesor bazy danych Wynik zapytania 1 2011-01-20 KLASYFIKACJA METOD OPTYMALIZACJI PRZYKŁAD Zapytanie SQL: Statyczna Dynamiczna SELECT Nazwisko FROM Dostawy JOIN Handlowcy WHERE nr_czesci=1; Wyrażenie w postaci algebry relacyjnej: Optymalizacja pojedynczego zapytania Optymalizacja zbioru zapytań π Nazwisko (σnr_czesci= 1(Dostawy PRZYKŁAD - REALIZACJA PRZYKŁAD - REALIZACJA Bezpośrednia – bez optymalizacji Złączenie tabel względem nr_czesci – wymaga odczytu dla każdej dostawy tabeli handlowcy, zapisania złączonych krotek na dysk, Restrykcja na otrzymanym po złączeniu wyniku do krotek z numerem części równym 1, Rzutowanie wyniku na atrybut Nazwisko. Z optymalizacją Restrykcja na relacji Dostawy do krotek odnoszących się do części nr 1, Złączenie wyniku kroku 1 z relacja Handlowcy, Rzutowanie wyniku kroku 2 na atrybut Nazwisko, Jeśli tabela Dostawy zawiera 10000 krotek a tabela Handlowcy 100, zaś tylko 50 krotek dotyczy części nr 1 to zapytanie to wymaga ponad 1000000 operacji wejścia- wyjścia. = Handlowcy)) Jeśli tabela Dostawy zawiera 10000 krotek a tabela Handlowcy 100 , zaś tylko 50 krotek dotyczy części nr 1 to zapytanie to wymaga ponad 10000 operacji wejściawyjścia. Wynik można poprawić zakładając indeks na pole nr_części w tabeli Dostawy. Wówczas liczba operacji wyniosłaby 150. 2 2011-01-20 ETAPY PROCESU OPTYMALIZACJI ETAP 1 – SFORMUŁOWANIE ZAPYTANIA 1. Sformułowanie zapytania w wewnętrznej reprezentacji Konwersja zapytania do pewnej reprezentacji wewnętrznej, która bardziej nadaje się do obróbki maszynowej, Wybór formalizmu na którym ta postać będzie się opierała: musi dawać możliwość reprezentacji dowolnych żądań, powinien być neutralny, 4. Plany realizacji zapytania i wybór najefektywniejszego rozwiązania Najczęściej wybiera się tzw. drzewo zapytania, ale także formalizmy algebry relacyjnej czy rachunku relacyjnego, ETAP 2 – PRZEKSZTAŁCENIE ETAP 3 – WYBÓR KANDYDATÓW Język SQL pozwala formułować zapytania na wiele sposobów, zaś wydajność zapytania nie powinna zależeć od postaci w jakiej zostało zapisane przez użytkownika, Etap ten polega na przekształceniu aktualnej postaci wewnętrznej do równoważnej mu postaci kanonicznej, Celem przekształcenia jest znalezienie wydajniejszej reprezentacji, Aby dokonać przekształcenia optymalizator używa tzw. reguł transformacji. 2. Przekształcenie do postaci kanonicznej 3. Wybór kandydatów do procedur implementacyjnych Na tym etapie zapada decyzja o sposobie wykonania przekształconego zapytania, Na wyrażenie stanowiące zapytanie należy spojrzeć jak na szereg operacji złączenia, restrykcji, etc. z pewnymi współzależnościami pomiędzy nimi, Dla każdej takiej operacji optymalizator posiada zestaw wcześniej zdefiniowanych procedur implementacyjnych, Z każdą procedurą związany jest wzór do obliczania kosztu wskazujący koszt jej realizacji (najczęściej w jednostkach we-wy), Optymalizator wybiera jedną lub więcej procedur implementujących każdą z operacji – ten proces nazywa się wyborem ścieżki dostępu. 3 2011-01-20 ETAP 4 – PLANY I WYBÓR TRANSFORMACJA WYRAŻEŃ Tworzony jest zbiór różnych planów wykonania zapytania oraz wybierany jest najlepszy, Nie należy tworzyć wszystkich możliwych planów dla danego zapytania, bo wiąże się to ze zwiększeniem kosztu znalezienia najlepszego, Wybór najefektywniejszego planu dokonuje się na bazie jego kosztu będącego sumą kosztów poszczególnych procedur – może to stanowić problem, gdyż koszty w dużej mierze zależą od rozmiaru danych. RESTRYKCJE I RZUTY RESTRYKCJE I RZUTY Sekwencja restrykcji z operatorem AND pojedyncza restrykcja Restrykcje i rzuty Rozdzielność Przemienność i łączność Idempotentność Skalarne wyrażenia obliczeniowe Wyrażenia warunkowe Przekształcenia semantyczne Restrykcja rzutu rzut restrykcji (A [rzut]) WHERE restrykcja (A WHERE restrykcja_1) WHERE restrykcja_2 A WHERE restrykcja_1 AND restrykcja_2 Sekwencja rzutów oprócz ostatniego (A WHERE restrykcja) [rzut] pomijanie wszystkich (A [rzut_1]) [rzut_2] A [rzut_2] 4 2011-01-20 ROZDZIELNOŚĆ ROZDZIELNOŚĆ Operator restrykcji jest rozdzielny względem sumy przecięcia i różnicy, a także złączenia jeśli warunek restrykcji dla dwóch argumentów operatora JOIN jest co najwyżej dwiema różnymi restrykcjami połączonymi operatorami AND, Operator rzutu jest rozdzielny względem sumy i przecięcia, nie różnicy, jest też rozdzielny względem złączenia jeśli wszystkie atrybuty złączenia znajdują się w rzucie. Operator monadyczny (jednoargumentowy) f jest rozdzielny względem operatora diadycznego , jeżeli f(A B) = f(A) f(B) dla każdego A i B. PRZEMIENNOŚĆ I ŁĄCZNOŚĆ Operator diadyczny jest przemienny PRZEMIENNOŚĆ I ŁĄCZNOŚĆ , jeżeli Operator diadyczny jest łączny A B=B A A dla każdego A i B. dla każdego A,B i C. Przemienne są: suma, przecięcie i złączenia, nie jest różnica i iloraz. (B C) = (A B) , jeżeli C Łączne są: suma, przecięcie i złączenia, nie jest różnica i iloraz. 5 2011-01-20 IDEMPOTENTNOŚĆ Operator diadyczny jest idempotentny SKALARNE WYRAŻENIA OBLICZENIOWE , jeżeli Transformacje obowiązują także dla wyrażeń arytmetycznych A A=A A* B +A* C dla każdego A i B. A * (B + C) Idempotentne są: suma, przecięcie i złączenia, nie jest różnica i iloraz. W YRAŻENIA WARUNKOWE Przekształcenia można oprzeć na fakcie, że operator „>” jest przechodni np. A>B AND B>3 A>B AND B>3 AND A>3 Każde wyrażenie warunkowe można przekształcić do równoważnego wyrażenia tzw. koniunktywnej postaci normalnej (z ang. CFN) C1 AND C2 AND … AND Cn gdzie Ci jest wyrażeniem warunkowym bez AND. W YRAŻENIA WARUNKOWE Np. A>B OR (C=D AND E<F) (A>B OR C=D) AND (A>B OR E<F) Zalety CNF: Wyrażenie jest prawdziwie, gdy każdy człon jest prawdziwy, to samo z fałszywym, Ponieważ AND jest przemienny można obliczać wyrażenia w dowolnej kolejności, co daje duże pole do popisu (od najłatwiejszego do najtrudniejszego bądź równolegle). 6 2011-01-20 PRZEKSZTAŁCENIA SEMANTYCZNE IMPLEMENTACJA OPERACJI SELECT Jest to przekształcenia, które jest poprawne jedynie ze względu na fakt, iż działa jakiś warunek integralności, Optymalizację semantyczną można zdefiniować jako proces przekształcenia jednego zapytania w inne, które na pewno da ten sam wynik, dlatego że dane muszą spełniać więzy integralności, Niewiele komercyjnych produktów korzysta z tego rodzaju optymalizacji, jednak może ona dać znaczące zwiększenie wydajności. IMPLEMENTACJA OPERACJI SELECT IMPLEMENTACJA OPERACJI SELECT użycie indeksu klastrowania w celu wybrania wielu rekordów – warunek wyboru zawiera porównanie równościowe na atrybucie niekluczowym z indeksem klastrowania, użycie indeksu drugorzędnego (B+-drzewa) na porównaniu równościowym – jeśli pole indeksujące jest kluczem głównym to pobieramy pojedynczy rekord, jeśli nie jest to wiele rekordów, Proste operacje wybierania wyszukiwanie liniowe – metoda siłowa wyszukiwanie binarne – jeśli warunek wyboru jest warunkiem równościowym na kluczu głównym, bardziej efektywna od liniowego użycie indeksu głównego - jeśli warunek wyboru jest warunkiem równościowym na kluczu głównym z indeksem, warunek powoduje wybranie najwyżej jednego rekordu, użycie indeksu głównego do pobrania wielu rekordów – jeśli warunkiem porównania jest relacja >,>=,<,<=, wybieramy najpierw rekord równy warunkowi i później resztę według relacji, Złożone operacje wybierania wybór koniunktywny przy użyciu pojedynczego indeksu – używamy metod od 2 do 6 do wyboru rekordów według pojedynczego warunku prostego, później sprawdzamy czy każdy pobrany rekord spełnia pozostałe warunki proste, wybór koniunktywny przy użyciu indeksu złożonego – dotyczy przypadków gdy warunki równości dotyczą dwóch lub więcej atrybutów i na połączonych polach istnieje indeks złożony, 7 2011-01-20 IMPLEMENTACJA OPERACJI SELECT IMPLEMENTACJA OPERACJI JOIN Selektywność (s) – współczynnik liczby rekordów, które spełniają warunek do całkowitej liczby rekordów w pliku (relacji) – s stanowi wartość z przedziału od 0 do 1, np. dla warunku równościowego na atrybucie klucza głównego s=1/r, gdzie r oznacza liczbę krotek w relacji, bądź dla warunku równościowego na atrybucie o i odrębnych wartościach s=(r/i)/r lub s=1/i przy założeniu że rekordy są równomierne rozłożone między różne wartości, IMPLEMENTACJA OPERACJI JOIN IMPLEMENTACJA OPERACJI RZUTOWANIA złączenie sortująco-scalające – posiadamy fizycznie posortowane rekordy obu plików według atrybutu złączenia (lub sortujemy je z użyciem sortowania zewnętrznego), oba pliki przeglądane są równolegle w kolejności atrybutów złączenia i dopasowywane są rekordy posiadające te same wartości dla atrybutu łączącego, złączenie mieszające – rekordy z obu plików podlegają działaniu tej samej funkcji mieszającej na atrybutach złączenia i są zapisywane w jednym pliku, faza podziału – stosujemy technikę mieszania na rekordach pliku mniej licznego i zapisujemy je w pakietach pliku mieszającego, faza sprawdzania – w pojedynczym przejściu przez drugi plik używamy f. mieszającej na każdym rekordzie w celu sprawdzenia pakietu i rekord zostaje połączony z wszystkimi odpowiadającymi mu rekordami z pierwszego pliku znajdującymi się w danym pakiecie. złączenie pętli zagnieżdżonych – metoda siłowa, dla każdego rekordu z jednego pliku pobieramy każdy rekord z drugiego pliku, złączenie z pętlą pojedynczą – używamy strukturę dostępową w celu pobrania pasujących rekordów, jeśli na jednym atrybucie w jednym pliku istnieje indeks to pobieramy każdy rekord z drugiego pliku (po jednym naraz) i używamy struktury dostępowej w celu pobrania pasujących rekordów z pierwszego pliku spełniających warunek złączenia, Jeśli <lista atrybutów> rzutowania zawiera klucz główny relacji to implementacja jest prosta – wynik zawiera tą samą liczbę krotek co relacja, ale każda krotka składa się tylko z atrybutów z listy, Jeśli <lista atrybutów> nie zawiera klucza głównego relacji to należy wyeliminować duplikaty krotek za pomocą sortowania. 8 2011-01-20 IMPLEMENTACJA OPERACJI IMPLEMENTACJA OPERACJI TEORIOMNOGOŚCIOWYCH TEORIOMNOGOŚCIOWYCH Iloczyn kartezjański – bardzo kosztowny, zawiera m*n rekordów oraz j+k atrybutów, należy unikać lub zastępować, Suma, różnica i przecięcie mogą być implementowane za pomocą dwóch technik: sortująco-mieszającej oraz mieszania: Technika sortująco-mieszająca – dwie relacje zostają posortowane i jednokrotnie przejrzane w celu ustalenia wyniku, np. w przypadku sumy – w wyniku zapisujemy scalone pliki, przy czym powtarzające się krotki tylko raz, IMPLEMENTACJA OPERACJI AGREGUJĄCYCH IMPLEMENTACJA ZŁĄCZENIA ZEWNĘTRZNEGO Gdy na atrybucie poddawanym operacji MIN lub MAX istnieje indeks to optymalizator za jego pomocą bezpośrednio odnajduje wartość minimalną lub maksymalną, jeśli nie istnieje indeks to dokonujemy pełnego przeglądu tabeli, Dla funkcji COUNT, AVG i SUM można również wykorzystać indeks, ale tylko w przypadku gdy jest on zagęszczony, W przypadku klauzuli GROUP BY najpierw stosowane jest sortowanie lub mieszanie na atrybutach grupujących w celu podziału na grupy, później zastosowanie funkcji agregującej dla krotek w każdej grupie, jeśli na atrybutach grupowania mamy indeks klastrowania są one od początku podzielone na odpowiednie podobszary. Technika mieszania – jedna z tabel zostaje podzielona, druga zaś używana jest w celu sprawdzania odpowiedniej partycji, np. w przypadku przecięcia dzielimy rekordy jednej tabeli zapisując je w pliku mieszającym, następnie poddajemy działaniu funkcji mieszającej każdy rekord drugiej tabeli i sprawdzamy czy w pakiecie jest identyczny rekord jeśli tak zapisujemy go w wyniku. Realizowane przez modyfikację algorytmu złączeniowego: pętli zagnieżdżonych lub z pętlą pojedynczą, Np. w przypadku złączenia lewostronnego używamy lewej relacji jako pętli zewnętrznej lub pojedynczej, bo każda krotka z tej relacji musi znaleźć się w wyniku. 9 2011-01-20 SKŁADOWE KOSZTU WYKONYWANIA ZAPYTANIA Koszt dostępu do drugorzędnych mechanizmów składowania danych – najważniejsze w przypadku dużych baz danych, Koszt składowania, Koszt obliczeniowy - najważniejsze w przypadku małych baz danych, Koszt zużycia pamięci, Koszt komunikacji - najważniejsze w przypadku rozproszonych baz danych. KATALOG A FUNKCJE KOSZTU Ważne informacje przechowywane w katalogu SZBD: Rozmiar pliku a więc: liczba rekordów (r), rozmiar rekordu (R), liczba bloków (b), współczynnik blokowy (bfr), Informacje o metodach dostępu oraz atrybutach dostępu, indeksach drugorzędnych, liczbie poziomów indeksu wielopoziomowego, etc., Liczba odrębnych wartości atrybutu (d) oraz jego selektywność (sl) – liczność selekcji s=sl*r. FUNKCJE KOSZTU DLA SELECT FUNKCJE KOSZTU DLA SELECT Funkcje kosztu w kontekście liczby przesyłanych bloków między pamięcią a dyskiem: Wyszukiwanie liniowe: C=b, gdy warunek równościowy na kluczu to średnio C=b/2, Wyszukiwanie binarne: C=log2b-ceiling(s/bfr)-1, jeśli warunek równościowy dotyczy klucza C=log2b, Indeks główny lub klucz mieszający do pobrania jednego rekordu: C=x+1, gdzie x to liczba poziomów indeksu, Indeks uporządkowania do pobrania wielu rekordów: zgrubnie C=x+(b/2), Indeks klastrowania do pobrania wielu rekordów: C=x+ceiling(s/bfr), Indeks drugorzędny (B+-drzewo): dla najgorszego przypadku C=x+s, C=x+1 gdy mamy atrybut indeksujący klucza, dla warunku porównania innego niż równościowy C=x+(b1/2)+(r/2), 10 2011-01-20 UŻYCIE FUNKCJI KOSZTU Dane: plik Pracownik, liczba rekordów r=10000, liczba bloków b=2000, współczynnik blokowy bfr=5, Ścieżki dostępu: Indeks klastrowania na atrybucie Pensja, liczba poziomów x=3, średnia liczebność selekcji s=20, Indeks drugorzędny na trybucie klucza PESEL, x=4, s=1, Indeks drugorzędny na trybucie niekluczowym NRDZ, x=2, b1=4, d=125, s=(r/d)=80, UŻYCIE FUNKCJI KOSZTU Drugorzędny indeks na atrybucie Płeć, x=1, d=2, s=5000, Przykłady: σPESEL= ‘45122345609’(Pracownik) σNRDZ>5(Pracownik) σNRDZ=5(Pracownik) σNRDZ=5 AND Pensja>30000 AND Płeć=‘k’(Pracownik) UŻYCIE FUNKCJI KOSZTU UŻYCIE FUNKCJI KOSZTU Przykład 1: metoda nr 1 – C=b=2000 lub C=b/2=1000, metoda nr 6 – C=x+1=4+1=5 Przykład 2: metoda nr 1 – C=b=2000 metoda nr 6 – C=x+(b1/2)+(r/2)=2+(4/2)+(10000/2)=5004 Przykład 3: metoda nr 1 – C=b=2000 metoda nr 6 – C=x+s=2+80=82 Przykład 4: gdy jako pierwszy rozpatrujemy warunek NRDZ=5 – C=82, gdy jako pierwszy Pensja>30000 – C=x+(b/2)=3+(2000/2)=1003, gdy jako pierwszy Płeć=‘k’ – C=x+s=1+5000=5001, Warunek NRDZ=5 jest używany do pobrania rekordów, pozostałe są sprawdzane pod względem każdego wybranego rekordu po ich pobraniu do pamięci. 11 2011-01-20 W YKŁAD PRZYGOTOWANO NA PODSTAWIE R. Elmasri, S. B. Navathe, Wprowadzenie do systemów baz danych, Helion, 2005, C. J. Date, Wprowadzenie do systemów baz danych, WNT, Warszawa, 2000, http://wazniak.mimuw.edu.pl/index.php?title=Bazy_ danych. 12