5. Przedstaw znane metody optymalizacji zapytań w bazach danych

Transkrypt

5. Przedstaw znane metody optymalizacji zapytań w bazach danych
5. Przedstaw znane metody optymalizacji zapytań w bazach danych (zalety i wady).
(mam nadzieję że pisze na temat =D )
cytat z wykładu:
„Wykonanie zapytania składającego się z większej ilości tabel wymaga przygotowania
odpowiedniego planu wykonania zapytania. Jego optymalizacja jest podstawowym zadaniem
współczesnych systemów zarządzania bazami danych.
Optymalizacja to proces doboru odpowiednich struktur danych, metod dostępu i operacji (planu
wykonania), w celu zminimalizowania kosztu realizacji polecenia. Optymalizacja jest wykonywany
przez wyspecjalizowany moduł systemu – optymalizator zapytań. „
Metody optymalizacji:
Optymalizacja dynamiczna zapytania - optymalizacja jest wykonywana za każdym razem, gdy
zapytanie jest wykonywane.
• Zaleta – wszystkie informacje potrzebne do wyboru optymalnej strategii są optymalne.
• Wada – obniżenie sprawności zapytania.
Optymalizacja statyczna zapytania – analiza składni, kontrola poprawności i optymalizacja
wykonane są tylko raz.
• Zaleta - unikanie analizy zapytania za każdym razem.
• Wada - możliwość zaistnienia sytuacji, w której raz wybrana strategia nie jest już optymalna.
(Dwie poniższe na pewno są stosowane w ORACLE nie wiem jak w innych bazach)
Regułowy (ORACLE, RBO or Rule Based Optimization (statyczna) ):
Oparty na rankingu metod dostępu do struktur danych. Preferowany dla aplikacji wsadowych.
Obecnie nie zalecany do użytku.
Optymalizatory regułowe dysponują zbiorem reguł postępowania (odnoszonych do konkretnych
rodzajów zapytań), przy pomocy których wskazują najlepszy plan wykonania zapytania. Przykładowo,
gdy użytkownik dokonuje selekcji rekordów tabeli, a dla tabeli tej dostępny jest indeks, to zostanie on
użyty (niezależnie od rozmiaru tabeli i indeksu czy od selektywności warunku WHERE), gdyż tak
mówi jedna z reguł. Zaletami optymalizatorów regułowych są: prostota budowy i duża szybkość
działania (tzn. duża szybkość wyboru planu, niekoniecznie optymalnego).
Kosztowy(CBO -> Cost Based Optimization (dynamiczna) ):
Oparty na szacowaniu kosztu (czasu zajętości procesora, liczby operacji I/O, zajętości pamięci
operacyjnej itp.) wykonania wszystkich potencjalnych planów zapytania. Zalecany dla wszystkich
nowo powstających aplikacji Zakłada duże obciążenie systemu, dużą współbieżność operacji, niski
współczynnik trafień w bufor danych. Na potrzeby tego optymalizatora robione są statystyki więcej
szczegółów w odpowiedzi do następnego pytania.
(nie znalazłem nic więcej na ten temat ale może warto poczytać tez o optymalizacji dostępu
do plików, łączeniu tabel itp. Tylko nie wiem czy to na pewno jest do tego pytania, według mnie
nie, ale jakby dr D drążył temat .. )
Aha i oczywiście optymalizujemy czas pracy sytemu w celu wykonania naszego zapytania.
Składowe czasu przetwarzania naszego zapytania:
Czas procesora
Czas oczekiwania na operacje I/O
Czas oczekiwania na komunikację I/O
Czas oczekiwania na dostęp do zasobów używanych przez inne aplikacje
6. Omów realizację optymalizacji w kosztowym optymalizatorze zapytań. Należy
opisać zagadnienia: szacowanie kosztu, statystyki, plan zapytania.
Skoro już wiemy co to jest optymalizacja oraz co mamy zoptymalizować (patrz poprzednie
pytanie) przypatrzmy się jak to wygląda w praktyce na przykładzie kosztowego optymalizatora
zapytań.
Zapytania są zwykle formułowane w języku SQL, którego główną cechą jest deklaratywność,
co oznacza, że użytkownik określa „co ma być znalezione”, a nie „w jaki sposób ma być znalezione”.
W związku z tym, dla każdego otrzymanego zapytania, system zarządzania bazą danych musi
wygenerować odpowiedni mikroprogram, który zrealizuje zlecone zadanie. W nomenklaturze
bazodanowej, mikroprogram taki nazywany jest planem wykonania zapytania (query execution plan).
Wykonanie zapytania możliwe jest na kilka sposobów, każdy taki sposób to właśnie plan
zapytania. Ma on formę drzewa binarnego, którego liście reprezentują operacje na dysku. Plany
mogą być przedstawione w formie graficznej:
lub tekstowej (forma wyświetlania planów zależy od DBMS'a i trybu pracy):
StmtText
---|--Sort(ORDER BY:([c].[LastName] ASC))
|--Nested Loops(Inner Join, OUTER REFERENCES:([e].[ContactID],
[Expr1004]) WITH UNORDERED PREFETCH)
|--Clustered Index
Scan(OBJECT:([AdventureWorks].[HumanResources].[Employee].
[PK_Employee_EmployeeID] AS [e]))
|--Clustered Index Seek(OBJECT:([AdventureWorks].[Person].
[Contact].[PK_Contact_ContactID] AS [c]),
SEEK:([c].[ContactID]=[AdventureWorks].
[HumanResources].[Employee].[ContactID] as
[e].[ContactID]) ORDERED FORWARD)
Plany te reprezentują zapytanie :
SELECT * FROM HumanResources.Employee AS e INNER JOIN Person.Contact AS c ON e.ContactID =
c.ContactID ORDER BY c.LastName
W planach kolejne węzły oznaczają dane wejściowe dla rodzica. Jeden węzeł może mieć
więcej niż jednego potomka (np operacje join) lub jednego (sort).
Gdy zostaną wygenerowane już różne plany następuje estymacja kosztu wykonania każdego
z planów. Estymację wykonujemy w oparciu o statystyki (o których więcej w dalszej części), oraz
modelu matematycznego. Estymowany koszt jest powiązany z czasem wykonania zapytania, jednak
nie należy go z nim mylić. W systemie Oracle jednostka kosztu odpowiada w przybliżeniu czasowi
wykonania jednej operacji I/O w systemie operacyjnym. Po oszacowaniu wszystkich planów
wybierany jest ten z najmniejszym kosztem.
Analityczne wyznaczenie kosztu dla wybranego planu wykonania zapytania wymaga
znajomości wielu parametrów bazy danych, np. liczby rekordów, jakie zostaną znalezione, rozmiarów
łączonych tabel itp. Obliczenie tych wszystkich parametrów wpłynęłoby bardzo niekorzystnie na czas
optymalizacji. Dlatego też system bazuje na statystykach . Statystyki zawierają informacje opisujące
struktury danych :
Dane generowane dla tabeli:
Liczba wierszy
Liczba bloków danych zawierających dane
Liczba nigdy nie użytych, zaalokowanych bloków danych
Średnia wielkość wolnego miejsca w zajętych blokach danych
Liczba łańcuchowanych wierszy
Średnia wielkość wierszy
Dla wszystkich kolumn liczbę unikalnych wartości oraz wartość minimalną i maksymalną
Dane generowane dla indeksu:
Wysokość drzewa
Liczba bloków-liści drzewa
Liczba unikalnych wartości indeksu
Średnia liczba bloków-liści przypadająca na jedną wartość klucza indeksu
Średnia liczba bloków danych (w tabeli) przypadająca na jedną wartość indeksu
Współczynnik zgrupowania, który określa na ile wiersze w tabeli są uporządkowane wg klucza
indeksu
Szczegółowe statystyki opisujące rozkład wartości poszczególnych kolumn, przydatne
w szczególności dla optymalizacji wykorzystania indeksów.
Z tego co udało mi się zorientować modele statystyczne nie są generowane automatycznie i
ich sporządzenie należy do administratora bazy. Przez sporządzenie rozumiem tu oczywiście
odpalenie odpowiednich skryptów/funkcji w bazie danych :). O ile dobrze pamiętam z wykładu
zazwyczaj konfiguruje się bazę tak by sama odpalała takie skrypty co pewien czas ( w okresach
małej aktywności bazy np. noc), lub po jakiś większych importach danych.
Warto zwrócić uwagę na to, że sama optymalizacja musi być wykonana w bardzo krótkim
czasie tak, aby nie stanowiła istotnego narzutu na całość realizacji zapytania. W środowiskach OLTP
oznacza to, że optymalizacja nie powinna zabierać więcej czasu niż ułamek sekundy.
Jak ktoś chce dowiedzieć się więcej to zachęcam do poczytania tych linków które dałem poniżej :)
Bibliografia:
http://www.cs.put.poznan.pl/mzakrzewicz/pubs/plsem02.pdf
http://en.wikipedia.org/wiki/Query_plan
http://en.wikipedia.org/wiki/Query_optimizer
1 i 2 wykład dr. Dydejczyka

Podobne dokumenty