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



Podobne dokumenty
Wykład XII. optymalizacja w relacyjnych bazach danych

Optymalizacja w relacyjnych bazach danych - wybór wydajnej strategii obliczania wyrażenia relacyjnego.

Optymalizacja poleceń SQL

Bazy danych wykład dwunasty. dwunasty Wykonywanie i optymalizacja zapytań SQL 1 / 36

Teoretyczne podstawy informatyki

Optymalizacja poleceń SQL Wprowadzenie

Bazy danych. Plan wykładu. Przetwarzanie zapytań. Etapy przetwarzania zapytania. Translacja zapytań języka SQL do postaci wyrażeń algebry relacji

BAZY DANYCH algebra relacyjna. Opracował: dr inż. Piotr Suchomski

Autor: Joanna Karwowska

Optymalizacja poleceń SQL Statystyki

Optymalizacja poleceń SQL Metody dostępu do danych

Optymalizacja. Plan wykonania polecenia SQL (1) Plan wykonania polecenia SQL (2) Rozdział 19 Wprowadzenie do optymalizacji poleceń SQL

Statystyki (1) Optymalizacja poleceń SQL Część 2. Statystyki (2) Statystyki (3) Informacje, opisujące dane i struktury obiektów bazy danych.

Technologie baz danych

Optymalizacja poleceń SQL

Fazy przetwarzania zapytania zapytanie SQL. Optymalizacja zapytań. Klasyfikacja technik optymalizacji zapytań. Proces optymalizacji zapytań.

Bazy danych. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

PLAN WYKŁADU BAZY DANYCH ETAPY PRZETWARZANIA ZAPYTANIA OPTYMALIZACJA ZAPYTAŃ

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

Systemy GIS Tworzenie zapytań w bazach danych

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

SQL SERVER 2012 i nie tylko:

SZKOLENIE: Administrator baz danych. Cel szkolenia

3. Podzapytania, łączenie tabel i zapytań

Model relacyjny. Wykład II

Przestrzenne bazy danych Podstawy języka SQL

Bazy danych. Dr inż. Paweł Kasprowski

PODSTAWY BAZ DANYCH. 15. Optymalizacja zapytań. 2009/ Notatki do wykładu "Podstawy baz danych"

1 Wstęp do modelu relacyjnego

Bazy danych 2013/14. Egzamin. (5 pkt). Baza danych przechowuje w relacji binarnej G graf skierowany.

Cwiczenie 4. Połączenia, struktury dodatkowe

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

RBD Relacyjne Bazy Danych

Cel przedmiotu. Wymagania wstępne w zakresie wiedzy, umiejętności i innych kompetencji 1 Język angielski 2 Inżynieria oprogramowania

Fazy przetwarzania polecenia SQL. Faza parsingu (2) Faza parsingu (1) Optymalizacja poleceń SQL Część 1.

Administracja i programowanie pod Microsoft SQL Server 2000

"Kilka słów" o strojeniu poleceń SQL w kontekście Hurtowni Danych wprowadzenie. Krzysztof Jankiewicz

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

Optymalizacja wydajności SZBD

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Wykład 6. SQL praca z tabelami 3

Wprowadzenie do języka SQL

Optymalizacja zapytań część I

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

Politechnika Poznańska TWO

Język SQL. Rozdział 2. Proste zapytania

Wstęp Wprowadzenie do BD Podstawy SQL. Bazy Danych i Systemy informacyjne Wykład 1. Piotr Syga

Hurtownie danych. Przetwarzanie zapytań. ZAPYTANIA NA ZAPLECZU

Optymalizacja zapytań

Grupowanie i funkcje agregacji

060 SQL FIZYCZNA STRUKTURA BAZY DANYCH. Prof. dr hab. Marek Wisła

Ć wiczenie 3. Statystyki, wskazó wki

Model relacyjny. Wykład II

Wstęp do SQL. copyright: KGiIS WGGiOŚ AGH

Podstawy języka SQL cz. 2

Zapytania z ograniczeniem czasowym w Oracle

Oracle11g: Wprowadzenie do SQL

Rozproszone bazy danych 3

Podstawowe zapytania SELECT (na jednej tabeli)

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Fizyczna struktura bazy danych w SQL Serwerze

Bazy danych 11. Algorytmy złaczeń. P. F. Góra

SQL (ang. Structured Query Language)

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

Rozpatrzymy bardzo uproszczoną bazę danych o schemacie

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

TEORETYCZNE PODSTAWY INFORMATYKI

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

TEORETYCZNE PODSTAWY INFORMATYKI

SQL praca z tabelami 4. Wykład 7

Kosztowy optymalizator zapytań

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Projekt jest finansowany ze środków Unii Europejskiej, Europejskiego Funduszu Społecznego i budŝetu państwa. Studia Podyplomowe dla Nauczycieli

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Bazy Danych. SQL Podstawy języka III: powtórzenie. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Optymalizacja zapytań część II

Bazy danych. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Systemy OLAP II. Krzysztof Dembczyński. Instytut Informatyki Zakład Inteligentnych Systemów Wspomagania Decyzji Politechnika Poznańska

Tadeusz Pankowski Relacyjne bazy danych. są podstawą zachodniej cywilizacji

Zapytania, złączenia, optymalizacja zapytań, planowanie zapytań, optymalizacja indeksów.

Struktury danych i optymalizacja

Indeksowanie w bazach danych

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Internetowe Bazy Danych. dr inż. Roman Ptak Katedra Informatyki Technicznej

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Bazy Danych. SQL Podstawy języka II: zapytania. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408

T-SQL w Microsoft SQL Server 2014 i SQL Server 2012

Laboratorium Bazy danych SQL 2

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Operacja Teta-złączenia. v1 v1 Θ v2

Optymalizacja poleceń SQL Indeksy

Bazy danych. Plan wykładu. Model logiczny i fizyczny. Operacje na pliku. Dyski. Mechanizmy składowania

SQL Structured Query Language

Transkrypt:

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

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

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

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

Przekształcanie wyrażeń algebry relacji 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). 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. Wydziel wspólne podwyrażenia i obliczaj je tylko raz.

Statystyki i szacowanie kosztu Statystyki dla relacji R: ntuples(r) liczba krotek relacji R, bfactor(r) liczba krotek relacji mieszczących się w jednym bloku dyskowym, nblocks(r) liczba bloków, w których jest przechowywana relacja R. Statystyki dla atrybutu A relacji 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, 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: nlevels A (I) - liczba poziomów I (jeśli jest drzewem), nlfblocks A (I) - liczba bloków-liści w drzewie.

Statystyki i szacowanie kosztu 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ść: 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<c ntuples(r)*n/ndistinct A (R) dla warunku A in {c 1,c 2,...,c n } SC A (R)*SC B (R) dla warunku (A AND B) SC A (R)+SC B (R)- SC A (R)*SC B (R) dla warunku (A OR B) W przypadku gdy w systemie znajdują się histogramy dla wartości atrybutu, powyższe szacowania mogą być dokładniejsze

Sposoby wykonania selekcji σ w(a) (R), w(a) - warunek na A 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) wykorzystanie indeksu grupującego dla A - SC (R)/bFactor(R)+nLevels A (I), wykorzystanie indeksu niegrupującego dla A - SC w(a) (R)+nLevels A (I) SC w(a) SC w(a)

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).

Wybór warunku do selekcji - przykład σ A=2 AND B>950 AND C=5 A=2 AND B>950 AND C=5 (R), dla R=ABCD R jest zapisana samodzielnie w nblocks(r)=1000 blokach dyskowych, ma 50000 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 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.

Obliczanie złączeń Szacunkowy rozmiar złączenia: R >< S, dla R = AB i S = BC wynosi: 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.

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: nblocks(r) + (nblocks(r)/(m-2))*nblocks(s) zapisu wyniku (zawsze taki sam): nblocks(r)*nblocks(s)/ndistinct B (R)

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))

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: 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.

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 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

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.

Porównanie metod złączenia - przykład P - pracownik (klucz: id) ntuples(p) = 6000 bfactor(p) = 30 nblocks(p) = 200 ndistinct id (P) = 6000 ma indeks niegrupujący po id wys.3 Z - zlecenie (zawiera id pracownika) ntuples(z) = 100000 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: 2000+2000*3=8000 Sort-Join: 2*200*(log 99 (200/99)+1) + 2*2000*((log 99 (2000/99)+1))+ 200+ 2000 2*200*2+2*2000*2+200+2000=(8800+2200)=11000 Hash-Join: 3*(200+2000)+3*100=6900

Statystyki w SZBD Statystyki tabel, atrybutów i indeksów są najczęściej aktualizowane: co pewien czas 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). 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.

Plan wykonania EXPLAIN [ANALYZE] <zapytanie SQL> 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 <atrybut> ON <relacja> lub FULL SCAN) 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 rozmiar wyniku operacji

Wskazówki (hints) 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 indeksu użyć przy obliczaniu selekcji, w jakiej kolejności wykonać złączenia, jakiego algorytmu złączenia użyć. Np. SELECT /*+ INDEX(wgMiasta)*/ nazwisko FROM Student WHERE miasto="chełm"