Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań1 Systemy zarządzania bazami danych 6. Optymalizacja zapytań

Slides:



Advertisements
Podobne prezentacje
Strojenie SQL w bazie Oracle
Advertisements

Sortowanie przez scalanie
Algorytmy sortowania i porządkowania
Algorytmy sortowania i przeszukiwania
Optymalizacja zapytań
Analiza progu rentowności
Grażyna Mirkowska PJWSTK 15 listopad 2000
Próg rentowności.
S – student, P – przedmiot, W – wykładowca
INDEKSY I SORTOWANIE ZEWNĘTRZNE
Programowanie I Rekurencja.
Zarządzanie operacjami
„Program grający w szachy”
ALGORYTMY I STRUKTURY DANYCH
Teoretyczne podstawy informatyki
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
1 RISC – nasze założenia Podstawowe cechy: Wszystkie operacje są realizowane na rejestrach, Tylko operacje typu load i store wymagają dostępu do pamięci,
Wprowadzenie System rozproszony jest kolekcją niezależnych, autonomicznych komputerów, które dla użytkownika prezentują się jak jeden komputer. Można wyróżnic.
Sortowanie Zajęcia 13.
ZŁOŻONOŚĆ OBLICZENIOWA
Systemy zarządzania bazami danych 9. Transakcje. Oryginał: Hector Garcia-Molina9. Transakcje2 Współbieżność, wielodostęp T 1 T 2 …T n BD (więzy integralności)
Turbo pascal – instrukcje warunkowe, iteracyjne,…
Imperatywne modele obliczeń Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Jednostki pamięci komputera
Obsługa plików csv Do odczytu z pliku csv można użyć następującego kodu: $fp = fopen ("strony.csv","r"); $num = 0; while ($data = fgetcsv ($fp, 1000, ";"))
Sortowanie przez scalanie Merge Sort
Algorytmy grafowe Reprezentacja w pamięci
Fizyczna organizacja danych w bazie danych Wykład 7
Projektowanie fizycznej bazy danych
WYKONYWANIE ZAPYTAŃ Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Relacyjne Bazy Danych (Oracle) Prezentacja jest współfinansowana.
Zarządzanie transakcjami Wykład S. Kozielski. Zarządzanie transakcjami Transakcja – jedna lub więcej operacji na bazie danych stanowiących pewną logiczną
ZESTAW KOMPUTEROWY.
Zależności funkcyjne.
TBD - P ERFORMANCE W BAZACH M ICROSOFT SQL S ERVER, CZYLI O CO W TYM W OGÓLE CHODZI Michał Grodzicki MCTS SQL SERVER lipca 2012.
Algorytmy i struktury danych
Synteza układów sekwencyjnych z (wbudowanymi) pamięciami ROM
Algorytmy i struktury danych
Zbiór do posortowania mieści się w pamięci
Algorytmy i Struktury Danych Sortowanie
Algorytmy i struktury danych
Pliki Pojęcie i rodzaje plików Definicja typu plikowego Operacje wykonywane na plikach elementowych.
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Materiały pochodzą z Platformy Edukacyjnej Portalu
Przykład syntezy strukturalnej
A-priori Partition Mateusz Mor, Kasper Rzepecki, Daniel Mendalka, Michał Samsonowski.
Pamięć komputerowa S t r u k t u r a p a m i ę c i.
Synteza logiczna w projektowaniu…
PROCESORY (C) Wiesław Sornat.
Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań1 Systemy zarządzania bazami danych 5. Przetwarzanie zapytań.
WYNIKI EGZAMINU MATURALNEGO W ZESPOLE SZKÓŁ TECHNICZNYCH
Jak Jaś parował skarpetki Andrzej Majkowski 1 informatyka +
System plików.
ALGORYTMY I STRUKTURY DANYCH WYKŁAD 03 cd. Wyszukiwanie Grażyna Mirkowska PJWSTK, 2003/2004.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
RAR jako format kompresji bezstratnej.. RAR został stworzony przez Rosjanina Eugene Roshala. Do kompresji danych używa odmiany kompresji LZSS. Jest wolniejszym.
Procesor, pamięć, przerwania, WE/WY, …
Elementy geometryczne i relacje
Powtórzenie wyk ł adu 10 Fizyczna organizacja danych w bazie danych. Indeksy.
Algorytmy równoległe Algorytm równoległy pozwala na wykonywanie w danej chwili więcej niż jednej operacji. EREW - wyłączny odczyt i wyłączny zapis; CREW.
mysz drukarka Jednostka centralna monitor klawiatura.
Indeksy drzewiaste. ISAM ISAM - INDEXED SEQUENTIAL ACCESS METHOD Problem: –Dany jest plik uporządkowany – w jaki sposób zrealizować efektywnie zapytanie.
Kompilacja iteracyjna Piotr Błaszyński. Szybkie programy Prawa ograniczające:  prawo Moore'a (jego granice),  prawo Gatesa,  prawo Amdahla,  prawo.
Listy.
Indeksy.
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań1 Systemy zarządzania bazami danych 6. Optymalizacja zapytań

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań2 --> Generowanie i wybór planu Zapytanie GenerujPlany Oczyśćx x Oszacuj koszty Koszty Wybierz Optymalizacja zapytań Wybierz Minimum

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań3 Generując plany weź pod uwagę: Przekształcenia zapytania w algebrze relacji (np. porządek złączeń) Użycie istniejących indeksów Zbudowanie nowych indeksów Sortowanie na użytek zapytania

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań4 Szczegóły implementacyjne Algorytmy złączania Zarządzanie pamięcią Przetwarzanie równoległe

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań5 Szacowanie kosztów we/wy Liczba bloków dyskowych, które trzeba przeczytać (i/lub zapisać) aby zrealizować plan zapytania –Zapisy potrzebne np. do realizacji wielofazowego sortowania zewnętrznego

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań6 Szacowanie wymaga parametrów B(R) = liczba bloków z krotkami relacji R f(R) = liczba krotek R w jednym bloku M = liczba dostępnych ramek pamięci HT(i) = liczba poziomów indeksu i LB(i) = liczba bloków z liśćmi indeksu i Jakich operacji są to koszty?

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań7 Indeks pogrupowany Indeks, w którym pozycje indeksu są w takim samym fizycznym porządku jak rekordy ind. na A A

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań8 Różne znaczenia pogrupowania Grono (cluster) ….. Relacja pogrupowana (clustered) ….. Indeks pogrupowany (clustering) R1 R2 S1 S2R3 R4 S3 S4 R1 R2 R3 R4 R5 R5 R7 R8

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań9 R1 R2 po wspólnym atrybucie C T(R1) = T(R2) = S(R1) = S(R2) = 1/10 bloku Dostępna pamięć = 101 bloków Miara: liczba operacji we/wy (ignorując zapis wyniku – dlaczego?)

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań10 Ostrożnie To może nie być najlepszy sposób szacowania: –Ignorujemy koszt przetwarzania przez procesor –Ignorujemy synchronizację –Ignorujemy możliwości równoległej pracy procesora i dysku (np. DMA)

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań11 Możliwości Transformacje: R1 R2, R2 R1 –Która relacja prowadząca? –Jaka kolejność złączeń? Algorytmy złączenia: –Iteracyjne (nested loops) –Przez scalanie (sort-merge join) –Iteracyjne z indeksem (index nested loops) –Haszowane (hash join)

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań12 Złączenie iteracyjne for each r R1 do for each s R2 do if r.C = s.C then output

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań13 Przez scalanie (przykład) i R1{i}.CR2{j}.Cj

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań14 Przez scalanie (1) Jeśli R1 i R2 nie posortowane po C, posortuj je (2) i 1; j 1; while (i T(R1)) (j T(R2)) do if R1{ i }.C = R2{ j }.C then outputTuples else if R1{ i }.C > R2{ j }.C then j j+1 else if R1{ i }.C < R2{ j }.C then i i+1

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań15 Procedura outputTuples while (R1{ i }.C = R2{ j }.C) (i T(R1)) do [ jj j; while (R1{ i }.C = R2{ jj }.C) (jj T(R2)) do [ output ; jj jj+1 ] i i+1 ]

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań16 for each r R1 do [ X index (R2, C, r.C) for each s X do output ] Zakładamy istnienie indeksu na R2.C X index(R, A, W) wówczas: X = zbiór krotek R o atrybucie A równym W Iteracyjne z indeksem

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań17 –Funkcja haszująca h, przeciwdziedzina 0 k –Kubełki dla R1: G0, G1,... Gk –Kubełki dla R2: H0, H1,... Hk (1) Rozrzuć krotki R1 do kubełków G (hasz na C) (2) Rozrzuć krotki R2 do kubełków H (hasz na C) (3) Dla każdego i = 0, 1, 2,..., k dopasuj krotki z kubełków G i i H i Haszowane

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań18 Prosty przykład: parzyste/nieparzyste R1R2Kubełki 25 Parzyste: 44 R1 R Nieparzyste:

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań19 Czynniki wpływające na wydajność Czy krotki relacji są trzymane razem fizycznie (ciągłe)? Czy relacje są posortowane po atrybucie złączenia? Czy są dostępne indeksy? Jak selektywne jest zapytanie?

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań20 Złączenie iteracyjne R1 R2 Relacje nieciągłe T(R1) = T(R2) = S(R1) = S(R2) =1/10 bloku M = 101 bloków Koszt: dla każdej krotki R1: [Odczyt krotki + odczyt całej R2] Łącznie = [1+5000]= Masakra

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań21 Czy da się lepiej? Użyjmy naszych umysłów Żeby wykorzystać dostępną pamięć (1) Wczytaj 100 bloków R1 (2) Wczytaj całą R2 (używając 1 bloku) i złącz (3) Powtarzaj do wyczerpania R1

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań22 Dla każdego fragmentu R1: Odczyt fragmentu: 1000 Odczyt R2: Łącznie = x 6000 = Koszty? Amnestia

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań23 Czy można jeszcze lepiej? Odwróć kolejność: R2 R1 Łącznie = 5000 x ( ) = x =

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań24 Relacje ciągłe Złączenie iteracyjne R1 R2 Koszt Dla każdego fragmentu R2: Odczyt fragmentu: 100 Odczyt R1: Łącznie= 5 fragmentów x 1100 = 5500

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań25 Złączenie przez scalanie R1, R2 posortowane po C; ciągłe Pamięć R1 R2 ….. R1 R2 Łączny koszt: Odczyt R1 + Odczyt R2 = = 1.500

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań26 R1, R2 nieposortowane, ale ciągłe Trzeba je posortować Jak? Złączenie przez scalanie

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań27 Sortowanie przez scalanie (i) Dla każdego 100-blokowego fragmentu R: - Przeczytaj fragment - Posortuj go w pamięci - Zapisz go na dysk posortowane fragmenty Pamięć R1 R2...

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań28 (ii) Przeczytaj fragmenty, scal i wypisz Posortowany plik Pamięć posortowane fragmenty...

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań29 Koszt sortowania Każda krotka jest odczytywana, zapisywana odczytywana, zapisywana Koszt sortowania R1: 4 x 1000 = Koszt sortowania R2: 4 x 500 = 2.000

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań30 Sortowanie przez scalanie R1,R2 ciągłe ale nieposortowane Łączny koszt = sortowanie + scalanie = = 7500 Ale: Koszt złączenia iteracyjnego = Złączenie przez scalanie się nie opłaca!

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań31 Ale:R1 = bloków ciągłe R2 = bloków nieposortowane Iteracyjnie: 5000 x ( ) = 50x = Przez scalanie: 5( ) = Złączenie przez scalanie wygrywa!

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań32 Pamięć potrzebna do sortowania Np. Załóżmy że mamy 10 bloków fragmentów do złączenia potrzebujemy 100 bloków! R1

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań33 W ogólności Liczba ramek pamięci: k Wielkość relacji: x bloków Liczba fragmentów = (x/k) Wielkość fragmentu = k L. fragmentów < L. ramek przy scalaniu więc... (x/k) k lub k 2 x or k x

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań34 W naszym przykładzie R1 ma 1000 bloków, k R2 ma 500 bloków, k Potrzeba co najmniej 32 ramek

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań35 Czy da się jeszcze poprawić scalanie? Czy naprawdę potrzebujemy całkowicie posortowanych relacji? R1 R2 Złączenie Posortowane ciągi

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań36 Koszt poprawionego algorytmu Odczyt R1 + Zapis posortowanych frag. R1 + Odczyt R2 + Zapis posortowanych frag. R2 + scalenie = = 4500 Jakie są wymagania względem pamięci?

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań37 Iteracyjne z indeksem Załóżmy istnienie indeksu na R1.C (dwupoziomowego) Załóżmy, że R2 jest ciągła, nieposortowana Załóżmy, że indeks na R1.C mieści się w pamięci

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań38 Odczyt R2: 500 dla każdej krotki R2: - Wyszukiwanie w indeksie (za darmo) - Odczyt każdej krotki R1 wskazanej przez indeks to koszt 1 Koszt iteracyjnego z indeksem

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań39 Ile jest pasujących krotek? (a) Jeśli R1.C to klucz, R2.C to klucz obcy, to spodziewana liczba = 1 (b) Jeśli V(R1,C) = 5000, T(R1) = (z założeniem rozkładu równomiernego) spodziewana liczba = /5.000 = 2

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań40 (c) Jeśli DOM(R1, C)= T(R1) = gdy rozkład równomierny w dziedzinie Spodziewana = 10,000 = 1 liczba Ile jest pasujących krotek?

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań41 Koszt iteracyjnego z indeksem (a) Łącznie = (1)1 = 5,500 (b) Łącznie = (2)1 = 10,500 (c) Łącznie = (1/100)1=550

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań42 Gdy indeks nie mieści się pamięci? Załóżmy, że indeks na R1.C ma 201 bloków Trzymaj korzeń + 99 liści w pamięci Średni koszt każdego wyszukiwania to: E = (0)99 + (1)101 0,

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań43 = [Wyszukiwanie + pobierz rekordy] = [0,5+2] = = (przypadek b) Przypadek (c) = [0,5 1 + (1/100) 1] = = 3050 Koszt łączny (z wyszukiwaniem)

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań44 Dotychczas Iteracyjne R2 R (najlepszy) Scalanie _______ Sort+Scalanie _______ Z indeksem na R1.C _______ Z indeksem na R2.C _______ Iteracyjne R2 R Scalanie 1500 Sort+Scalanie Z indeksem na R1.C Z indeksem na R2.C ________ ciągłe nie-ciągłe

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań45 R1, R2 ciągłe (nie-posortowane) Użyj 100 kubełków Odczytaj R1, haszuj + zapisz kubełki R1 Haszowane bloków 100

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań46 ->Tak samo dla R2 ->Przeczytaj kubełek R1; zbuduj w pamięci tab.hasz. ->Przeczytaj odpowiedni kubełek R2 + złącz haszem R1 R2... R1 Pamięć... ->Powtórz dla wszystkich kubełków

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań47 Koszt Kubełkowanie Odczyt R1 + zapis Odczyt R2 + zapis Scalanie:Odczyt R1, R2 Koszt łączny = 3 x [ ] = 4500 Uwaga: to jest tylko oszacowanie, ponieważ kubełki mogą się różnić wielkością i trzeba je było zaokrąglić do wielkości bloku

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań48 Wymaganie pamięciowe Rozmiar kubełka dla R1 = (x/k) k = liczba ramek pamięci x = liczba bloków R1 Więc?(x/k) < k k > x potrzeba k+1 ramek

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań49 Sztuczka: trzymaj niektóre kubełki w RAM Np., k=33 kubełki R1 = 31 bloków trzymaj 2 w RAM pamięć G0G0 G1G1 wej =31 R1 Użycie pamięci: G031 ramek G131 ramek Wyjście33-2 ramek Odczyt R11 Łącznie94 ramek Zostało jeszcze 6 ramek! Hybrydowe złączenie haszowane

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań50 Następnie: Kubełkowanie R2 –Kubełki R2 =500/33= 16 bloków –Dwa z kubełków R2 od razu łączone z G0,G1 pamięć G0G0 G1G1 wej =31 R =31 Kubełki R2 Kubełki R1

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań51 Ostatecznie: Scal pozostałe kubełki –Dla każdej pary kubełków: Wczytaj jeden z nich w całości do pamięci Scal z drugim z nich pamięć GiGi wyj =31 wynik =31 Kubełki R2 Kubełki R1 cały kubełek R2 jedna ramka R1

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań52 Koszt hybrydowego haszowanego Kubełkowanie R1 = =1961 Kubełkowanie R2, zapisujemy tylko 31 kubełków, więc =996 Scalanie kubełków (2 już z głowy): odczyty =1457 Łącznie = = 4414

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań53 Ile kubełków trzymać w pamięci? pamięć G0G0 G1G1 wej. R1 pamięć G0G0 wej. R1 czy ?

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań54 Kolejna sztuczka dla haszowanego Do kubełków zapisuj tylko pary = Utworzenie indeksu haszowanego w locie Dopiero gdy znajdzie się para pasujących krotek, trzeba ściągnąć z dysku krotki

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań55 Założenia: –100 par w bloku –Spodziewana liczba krotek wynikowych = 100 Zbuduj tablicę haszującą dla R2 w pamięci 5000 krotek 5000/100 = 50 bloków Odczytaj R1 i scalaj Odczytaj ~ 100 krotek R2 Łączny koszt = Odczyt R2: 500 Odczyt R1:1000 Pobierz krotki:

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań56 Dotychczas Iteracyjne5500 Scalanie1500 Sort+scalanie7500 Indeks na R1.C Indeks na R2.C_____ Zbuduj indeks na R1.C _____ Zbuduj indeks na R2.C _____ Haszowane4500+ sztuczka,R1 prow.4414 sztuczka,R2 prow._____ Haszowane, wskaźniki1600 ciągłe

Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań57 Podsumowanie Iteracyjne dobre dla małych relacji (w porównaniu z wielkością pamięci) Dla złączenia równościowego, gdy relacje nie są posortowane i nie ma indeksów, haszowane zwykle najlepsze Przez scalanie dobre dla złączeń nie- równościowych (np., R1.C > R2.C) Jeśli relacje już posortowane, użyj scalania Jeśli są indeksy, mogą być użyteczne (zależy to od selektywności – spodziewanego rozmiaru wyniku)