Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Optymalizacja zapytań Proces przetwarzania i obliczania wyniku zapytania (wyrażenia algebry relacji) w SZBD.

Podobne prezentacje


Prezentacja na temat: "Optymalizacja zapytań Proces przetwarzania i obliczania wyniku zapytania (wyrażenia algebry relacji) w SZBD."— Zapis prezentacji:

1 Optymalizacja zapytań Proces przetwarzania i obliczania wyniku zapytania (wyrażenia algebry relacji) w SZBD

2 Elementy optymalizacji Analiza zapytania i przekształcenie go do lepszej postaci. Analiza zapytania i przekształcenie go do lepszej postaci. Oszacowanie kosztu różnych opcji wykonania zapytania: Oszacowanie kosztu różnych opcji wykonania zapytania: informacje (statystyki) służące do szacowania kosztu; informacje (statystyki) służące do szacowania kosztu; metody wykonania selekcji; metody wykonania selekcji; metody złączeń; metody złączeń; metody eliminacji duplikatów i sortowania metody eliminacji duplikatów i sortowania Analizowanie i modyfikowanie planu wykonania zapytania. Analizowanie i modyfikowanie planu wykonania zapytania.

3 Przekształcanie wyrażeń algebry relacji SELECT K.prow FROM Student S, Ocena O, Kurs K WHERE S.indeks=O.indeks AND O.przed=K.przed AND O.ocena>=K.ocenaKwal AND S.nazwisko="Abacki

4 Przekształcanie wyrażeń algebry relacji S1 = π indeks (σ nazwisko="Abacki (S)) S1 = π indeks (σ nazwisko="Abacki (S)) O1 = π indeks,ocena,przed (Ocena) O1 = π indeks,ocena,przed (Ocena) K1 = π prow,ocenaKwal,przed (Kurs) K1 = π prow,ocenaKwal,przed (Kurs) SO = π ocena,przed (S1 |> <| O1) SOK = π prow (σ ocena>=ocenaKwal (SO |> =ocenaKwal (SO |><| K))

5 Przekształcanie wyrażeń algebry relacji Wykonaj jak najwcześniej operacje selekcji (przemienność selekcji z innymi operacjami). Wykonaj jak najwcześniej operacje selekcji (przemienność selekcji z innymi operacjami). Połącz iloczyn kartezjański z następującą po nim selekcją w złączenie (o ile to możliwe). Połącz iloczyn kartezjański z następującą po nim selekcją w złączenie (o ile to możliwe). Zastosuj łączność operacji złączenia tak, by wykonać złączenia w jak najbardziej ekonomicznej kolejności (algorytm dynamiczny wyznaczania optymalnej kolejności rozstawienia nawiasów). Zastosuj łączność operacji złączenia tak, by wykonać złączenia w jak najbardziej ekonomicznej kolejności (algorytm dynamiczny wyznaczania optymalnej kolejności rozstawienia nawiasów). Wykonaj jak najwcześniej operacje rzutu. Wykonaj jak najwcześniej operacje rzutu. Wydziel wspólne podwyrażenia i obliczaj je tylko raz. Wydziel wspólne podwyrażenia i obliczaj je tylko raz.

6 Statystyki i szacowanie kosztu Statystyki dla relacji R: Statystyki dla relacji R: nTuples(R) – liczba krotek relacji R, nTuples(R) – liczba krotek relacji R, bFactor(R) – liczba krotek relacji mieszczących się w jednym bloku dyskowym, bFactor(R) – liczba krotek relacji mieszczących się w jednym bloku dyskowym, nBlocks(R) – liczba bloków, w których jest przechowywana relacja R. nBlocks(R) – liczba bloków, w których jest przechowywana relacja R. Statystyki dla atrybutu A relacji R: Statystyki dla atrybutu A relacji R: nDistinct A (R) – liczba różnych wartości A w R, nDistinct A (R) – liczba różnych wartości A w R, min A (R), max A (R) – minimalna i maksymalna wartość A w R, min A (R), max A (R) – minimalna i maksymalna wartość A w R, SC A (R) – selektywność A w R, czyli średnia liczba krotek spełniających warunek równości dla A. SC A (R) – selektywność A w R, czyli średnia liczba krotek spełniających warunek równości dla A. Statystyki dla indeksu I według atrybutu A: Statystyki dla indeksu I według atrybutu A: nLevels A (I) - liczba poziomów I (jeśli jest drzewem), nLevels A (I) - liczba poziomów I (jeśli jest drzewem), nLfBlocks A (I) - liczba bloków-liści w drzewie. nLfBlocks A (I) - liczba bloków-liści w drzewie.

7 Statystyki i szacowanie kosztu Przyjmuje się Przyjmuje się SC A (R) = { 1 iff A klucz; nTuples(R)/nDistinct A (R) wpp } Dla innych warunków także można określić selektywność: Dla innych warunków także można określić selektywność: nTuples(R)* ((max A (R)-c)/(max A (R)-min A (R))) dla warunku A>c nTuples(R)* ((max A (R)-c)/(max A (R)-min A (R))) dla warunku A>c nTuples(R)* ((c-min A (R))/(max A (R)-min A (R))) dla warunku A

8 Sposoby wykonania selekcji σ w(A) (R), w(A) - warunek na A skanowanie całej relacji - nBlocks(R), skanowanie całej relacji - nBlocks(R), wybranie wszystkich krotek relacji za pomocą indeksu (np. dla relacji pamiętanej w klastrze)- nTuples(R)+nLevels A (I) wybranie wszystkich krotek relacji za pomocą indeksu (np. dla relacji pamiętanej w klastrze)- nTuples(R)+nLevels A (I) wykorzystanie indeksu grupującego dla A - SC w(A) (R)/bFactor(R)+nLevels A (I), wykorzystanie indeksu grupującego dla A - SC w(A) (R)/bFactor(R)+nLevels A (I), wykorzystanie indeksu niegrupującego dla A - SC w(A) (R)+nLevels A (I) wykorzystanie indeksu niegrupującego dla A - SC w(A) (R)+nLevels A (I)

9 Wybór warunku do selekcji σ F1 AND... AND Fn (R), F 1,...,F n - proste warunki Dla każdego F i (1 <= i <= n) szacujemy koszt c i wykonania selekcji σ Fi. Wybieramy i, dla którego szacunkowy koszt był minimalny, i wybieramy (za pomocą indeksu lub bez) krotki spełniające warunek F i, przy okazji sprawdzając, czy spełniają pozostałe warunki selekcji F j (j<>i).

10 Wybór warunku do selekcji - przykład σ A=2 AND B>950 AND C=5 (R), dla R=ABCD R jest zapisana samodzielnie w nBlocks(R)=1000 blokach dyskowych, ma krotek, po 50 w jednym bloku; koszt skanowania = 1000; R jest zapisana samodzielnie w nBlocks(R)=1000 blokach dyskowych, ma krotek, po 50 w jednym bloku; koszt skanowania = 1000; R ma indeks niegrupujący dla A i nDistinct A (R)=10; koszt wyszukania wg A = 50000/10 = 5000; R ma indeks niegrupujący dla A i nDistinct A (R)=10; koszt wyszukania wg A = 50000/10 = 5000; R ma indeks grupujący dla B i nDistinct B (R)=1000, min B (R)=1, max B (R)=1000; koszt wyszukania wg B = 50000*(50/1000)*(1/50) = 50; R ma indeks grupujący dla B i nDistinct B (R)=1000, min B (R)=1, max B (R)=1000; koszt wyszukania wg B = 50000*(50/1000)*(1/50) = 50; Dla C i D nie ma indeksów. Dla C i D nie ma indeksów.

11 Obliczanie złączeń Szacunkowy rozmiar złączenia: Szacunkowy rozmiar złączenia: R |> <| S, dla R = AB i S = BCwynosi: nDistinct B (?)* (nTuples(R)/nDistinct B (R)*nTuples(S)/nDistinct B (S)) = = nTuples(R)*nTuples(S)/nDistinct B (R), przy założeniu, że rozkład wartości B w R i S jest jednostajny.

12 Zagnieżdżone pętle po blokach for next M-2 blocks br 1,br 2,...,br M-2 in R do for each block bs in S do for i=1,..,M-1 return br i |> <| bs; Szacunkowy koszt czytania: Szacunkowy koszt czytania: nBlocks(R) + (nBlocks(R)/(M-2))*nBlocks(S) zapisu wyniku (zawsze taki sam): nBlocks(R)*nBlocks(S)/nDistinct B (R)

13 Złączenia z wykorzystaniem indeksu: // 1. S ma indeks grupujący I wg. B for each t in R do search sx={s in S: s.B = t.B by I}; return sx |> <| {t}; // nBlocks(R)+ nTuples(R)*(nLevels B (S)+nBlocks(S)/nDistinct B (S)) // 2. S ma ind. grup.(I1), R ma ind. niegrup. I1, I2 wg. B for each value x in I1 do search sx = {s in S: s.B = x by I1}; search tx = {t in R: t.B = x by I2}; return sx |> <| tx; // nDistinct B (S)*(nLevels B (I1)+nBlocks(S)/nDistinct B (S)+ nLevels B (I2)*nTuples(R)/nDistinct B (R)) nLevels B (I2)*nTuples(R)/nDistinct B (R))

14 Sort-Merge Join Sort(R wg B) // 2*nBlocks(R)* (log M-1 (nBlocks(R)/(M-1)+1) Sort(S wg B) // 2*Blocks(S)* (log M-1 (nBlocks(S)/(M-1)+1) Merge(R,S wg B) // nBlocks(R)+nBlocks(S) Sortowanie: Sortowanie: w pierwszym przebiegu sortujemy serie złożone z M-1 bloków; w pierwszym przebiegu sortujemy serie złożone z M-1 bloków; potem log M-1 (nBlocks(R)/(M-1) razy scalamy po M-1 uporządkowanych serii najpierw długości M-1, potem (M-1) 2, potem (M-1) 3 itd. potem log M-1 (nBlocks(R)/(M-1) razy scalamy po M-1 uporządkowanych serii najpierw długości M-1, potem (M-1) 2, potem (M-1) 3 itd.

15 Hash-join // h - funkcja haszująca dla B przyjmująca wartości 1,...,M-1 Hash(R wg h(B)) into R 1,R 2,...,R M-1 // 2*nBlocks(R) Hash(S wg h(B)) into S 1,S 2,...,S M-1 // 2*nBlocks(S) // h' - funkcja haszująca dla B niezależna od h przyjmująca także wartości 1,...,M-1 // h' - funkcja haszująca dla B niezależna od h przyjmująca także wartości 1,...,M-1 for i=1,...,M-1 do Hash(R i wg h'(B)) into A 1,A 2,...,A M-1 // nBlocks(R i )+M-1 Hash(S i wg h'(B)) into B 1,B 2,...,B M-1 // nBlocks(S i ) for j=1,...,M-1 return Aj |> <| Bj; // M-1 // razem koszt: 3*(nBlocks(R)+nBlocks(S))+(2..4)*M

16 Sortowanie, grupowanie i eliminacja powtórzeń Operacje grupowania i eliminacji powtórzeń można wykonać poprzez sortowanie (M-1-krotny merge-sort, czyli multiway Merge-Sort) lub poprzez haszowanie połączone z sortowanie kubełków w pamięci. Operacje grupowania i eliminacji powtórzeń można wykonać poprzez sortowanie (M-1-krotny merge-sort, czyli multiway Merge-Sort) lub poprzez haszowanie połączone z sortowanie kubełków w pamięci.

17 Porównanie metod złączenia - przykład P - pracownik (klucz: id) P - pracownik (klucz: id) nTuples(P) = 6000 nTuples(P) = 6000 bFactor(P) = 30 bFactor(P) = 30 nBlocks(P) = 200 nBlocks(P) = 200 nDistinct id (P) = 6000 nDistinct id (P) = 6000 ma indeks niegrupujący po id wys.3 ma indeks niegrupujący po id wys.3 Z - zlecenie (zawiera id pracownika) nTuples(Z) = bFactor(Z) = 50 nBlocks(Z) = 2000 nDistinct id (Z) = 16 M = 100 Pętle po blokach (P zewnętrzna): 200+(200/98)*2000=4281 Pętle po blokach (Z - zewnętrzna): 2000+(2000/98)*200=6081 Pętla z indeksem niegrupującym: *3=8000 Sort-Join: 2*200*(log 99 (200/99)+1) + 2*2000*((log 99 (2000/99)+1)) *200*2+2*2000* =( )=11000 Hash-Join: 3*( )+3*100=6900

18 Statystyki w SZBD Statystyki tabel, atrybutów i indeksów są najczęściej aktualizowane: Statystyki tabel, atrybutów i indeksów są najczęściej aktualizowane: co pewien czas lub co pewien czas lub przy okazji operacji przeglądających relację (np. budowa indeksu) lub przy okazji operacji przeglądających relację (np. budowa indeksu) lub na wyraźne życzenie użytkownika (np. polecenia z pakietu DBMS_STATS w Oracle). na wyraźne życzenie użytkownika (np. polecenia z pakietu DBMS_STATS w Oracle). Oprócz podanych wcześniej, system może budować histogramy wartości atrybutów pozwalające trafnie oceniać koszt operacji nawet przy niejednostajnym rozkładzie wartości. Oprócz podanych wcześniej, system może budować histogramy wartości atrybutów pozwalające trafnie oceniać koszt operacji nawet przy niejednostajnym rozkładzie wartości.

19 Plan wykonania EXPLAIN [ANALYZE] EXPLAIN [ANALYZE] kolejność i metody wykonywania złączeń (NESTED LOOPS, HASH-JOIN, SORT-JOIN, INDEX NESTED LOOPS), kolejność i metody wykonywania złączeń (NESTED LOOPS, HASH-JOIN, SORT-JOIN, INDEX NESTED LOOPS), warunek selekcji i ewentualnie użyty dla niego indeks (np. INDEX SCAN USING ON lub FULL SCAN) warunek selekcji i ewentualnie użyty dla niego indeks (np. INDEX SCAN USING ON lub FULL SCAN) końcowe sortowanie, grupowanie lub haszowanie w celu uporządkowania lub pogrupowania wyniku. końcowe sortowanie, grupowanie lub haszowanie w celu uporządkowania lub pogrupowania wyniku. szacunkowy czas wykonania poszczególnych operacji (jeżeli użyto ANALYZE, to zapytanie jest wykonywane) szacunkowy czas wykonania poszczególnych operacji (jeżeli użyto ANALYZE, to zapytanie jest wykonywane) szacunkowy rozmiar wyniku operacji szacunkowy rozmiar wyniku operacji

20 Wskazówki (hints) Specjalne komentarze zamieszczane przy zapytaniu wskazujące, jakiej metody obliczania ma użyć system. W komentarzu tym można zapisać: Specjalne komentarze zamieszczane przy zapytaniu wskazujące, jakiej metody obliczania ma użyć system. W komentarzu tym można zapisać: jakiego optymalizatora ma użyć system (np. w Oracle można wybrać oparty na kosztach lub rankingu operacji), jakiego optymalizatora ma użyć system (np. w Oracle można wybrać oparty na kosztach lub rankingu operacji), jakiego indeksu użyć przy obliczaniu selekcji, jakiego indeksu użyć przy obliczaniu selekcji, w jakiej kolejności wykonać złączenia, w jakiej kolejności wykonać złączenia, jakiego algorytmu złączenia użyć. jakiego algorytmu złączenia użyć. Np. SELECT /*+ INDEX(wgMiasta)*/ nazwisko Np. SELECT /*+ INDEX(wgMiasta)*/ nazwisko FROM Student WHERE miasto="Chełm"


Pobierz ppt "Optymalizacja zapytań Proces przetwarzania i obliczania wyniku zapytania (wyrażenia algebry relacji) w SZBD."

Podobne prezentacje


Reklamy Google