Optymalizacja poleceń SQL



Podobne dokumenty
Optymalizacja poleceń SQL

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

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

Optymalizacja poleceń SQL Wprowadzenie

Optymalizacja poleceń SQL Metody dostępu do danych

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

INDEKSY. Biologiczne Aplikacje Baz Danych. dr inż. Anna Leśniewska

Optymalizacja poleceń SQL Indeksy

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

Cwiczenie 2. Metody dostępu do danych

Indeksy. Rozdział 18. Indeksy. Struktura indeksu. Adres rekordu

Rozproszone bazy danych 3

Kosztowy optymalizator zapytań

Wydajność hurtowni danych opartej o Oracle10g Database

Optymalizacja poleceń SQL Statystyki

Cwiczenie 4. Połączenia, struktury dodatkowe

Język SQL. Rozdział 7. Zaawansowane mechanizmy w zapytaniach

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

Strojenie poleceń SQL. (c) Instytut Informatyki Politechniki Poznańskiej 221

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

Strojenie poleceń SQL. (c) Instytut Informatyki Politechniki Poznańskiej 221

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

Język SQL. Rozdział 8. Język manipulowania danymi DML

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

Język SQL. Rozdział 2. Proste zapytania

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

Performance Tuning. w środowisku RAC/WebLogic na maszynach Sun T5220

Ć wiczenie 3. Statystyki, wskazó wki

Wykład XII. optymalizacja w relacyjnych bazach danych

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

Relacyjne bazy danych. Podstawy SQL

Wprowadzenie do języka SQL

Procedury i funkcje składowane

SQL (ang. Structured Query Language)

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Język SQL. Rozdział 8. Język manipulowania danymi DML zadania

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

Plan wykładu. Klucz wyszukiwania. Pojęcie indeksu BAZY DANYCH. Pojęcie indeksu - rodzaje indeksów Metody implementacji indeksów.

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

Relacyjne bazy danych. Podstawy SQL

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

Optymalizacja zapytań

Systemy GIS Tworzenie zapytań w bazach danych

Przestrzenne bazy danych Podstawy języka SQL

Bazy danych i usługi sieciowe

SQL do zaawansowanych analiz danych część 1.

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

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

Administracja i programowanie pod Microsoft SQL Server 2000

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

Język SQL. Rozdział 6. Podzapytania Podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, operatory ANY, ALL i EXISTS.

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

Oracle11g: Wprowadzenie do SQL

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

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

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

Fizyczna struktura bazy danych w SQL Serwerze

Indeksy. Indeks typu B drzewo

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

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

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

Widok Connections po utworzeniu połączenia. Obszar roboczy

Uprawnienia, role, synonimy

P o d s t a w y j ę z y k a S Q L

Wykład 5. SQL praca z tabelami 2

SQL SERVER 2012 i nie tylko:

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Administracja i programowanie pod Microsoft SQL Server 2000

Rozdział 17. Zarządzanie współbieżnością zadania

Język PL/SQL Procedury i funkcje składowane

Cwiczenie 1. Wys wietlanie plano w wykonania polecen SQL

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Wykład 6. SQL praca z tabelami 3

Język SQL, zajęcia nr 1

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

Indeksowanie w bazach danych

Rozszerzenia grupowania

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

(a) T (b) N (c) N (d) T

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

Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski. Poznań,

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

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

Bazy Danych i Usługi Sieciowe

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

3. Podzapytania, łączenie tabel i zapytań

Język SQL. Rozdział 4. Funkcje grupowe Funkcje grupowe, podział relacji na grupy, klauzule GROUP BY i HAVING.

Ćwiczenie zapytań języka bazy danych PostgreSQL

Strojenie zapytañ SQL czyli, mo na jeszcze szybciej

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

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

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

Politechnika Poznańska TWO

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

Systemowe aspekty baz

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

Transkrypt:

Optymalizacja poleceń SQL Optymalizacja kosztowa i regułowa, dyrektywa AUTOTRACE w SQL*Plus, statystyki i histogramy, metody dostępu i sortowania, indeksy typu B* drzewo, indeksy bitmapowe i funkcyjne, metody połączeń, wskazówki

Optymalizacja Optymalizacja to proces doboru odpowiednich struktur danych, metod dostępu i operacji (planu wykonania), w celu zminimalizowania kosztu realizacji polecenia. Optymalizacja jest wykonywana przez wyspecjalizowany moduł systemu optymalizator zapytań. regułowa oparta na rankingu metod dostępu do struktur danych preferowana dla aplikacji spadkowych kosztowa oparta na szacowaniu kosztu (czas zajętości procesora, liczby operacji we/wy, zajętość pamięci operacyjnej itp.), wykonania wszystkich potencjalnych planów wykonania zalecana dla wszystkich nowopowstających aplikacji zakłada duże obciążenie systemu: dużą współbieżność operacji, niski współczynnik trafień w bufor danych

Przetwarzanie polecenia SQL użytkownik słownik polecenie PARSER REGUŁOWY RBO plan zapytania RODZAJ OPTYMALIZATORA? GENERATOR KROTEK plan wykonania statystyki KOSZTOWY CBO plan zapytania wynik WYKONANIE

struktury danych metody dostępu reguły operacje statystyki Optymalizacja polecenia SQL transformator estymator zapytań zapytanie po transformacji generator planów zapytanie i estymacje zapytanie SQL statystyki słownik plan wykonania

Dyrektywa AUTOTRACE w SQL*Plus (/2) SQL> @$ORACLE_HOME\SQLPLUS\ADMIN\PLUSTRCE.SQL SQL> GRANT PLUSTRACE TO TO SCOTT SQL> SET SET AUTOTRACE [[ ON ON OFF OFF ]][[ TRACEONLY ]] [[ EXPLAIN ]][[ STATISTICS ]] SQL> SQL> SET SET AUTOTRACE AUTOTRACE TRACEONLY TRACEONLY EXPLAIN EXPLAIN SQL> SQL> SELECT SELECT nazwisko nazwisko FROM FROM pracownicy pracownicy WHERE WHERE id_prac=; id_prac=; Plan Plan wykonywania wykonywania ---------------------------------------------------------- ---------------------------------------------------------- SELECT SELECT STATEMENT STATEMENT Optimizer= Optimizer= ALL_ROWS ALL_ROWS (Cost= (Cost= Card= Card= Bytes=22) Bytes=22) TABLE TABLE ACCESS ACCESS (BY (BY ROWID) ROWID) OF OF 'PRACOWNICY' 'PRACOWNICY' (Cost= (Cost= Card= Card= Bytes=22) Bytes=22) 2 2 INDEX INDEX (UNIQUE (UNIQUE SCAN) SCAN) OF OF 'PK_PRAC' 'PK_PRAC' (UNIQUE) (UNIQUE) SQL> SQL> SET SET AUTOTRACE AUTOTRACE OFF OFF

Dyrektywa AUTOTRACE w SQL*Plus (2/2) SQL> SQL> SET SET AUTOTRACE AUTOTRACE ON ON SQL> SQL> SELECT SELECT nazwisko nazwisko FROM FROM pracownicy pracownicy WHERE WHERE placa_pod=48; placa_pod=48; ID_PRAC ID_PRAC NAZWISKO NAZWISKO ETAT ETAT ID_SZEFA ID_SZEFA ZATRUDNI ZATRUDNI PLACA_POD PLACA_POD PLACA_DOD PLACA_DOD ID_ZESP ID_ZESP ------- ------- --------- --------- ---------- ---------- -------- -------- -------- -------- ---------- ---------- ---------- ---------- -------- -------- 22 22 KONOPKA KONOPKA ASYSTENT ASYSTENT 93// 93// 48 48 2 2 23 23 HAPKE HAPKE ASYSTENT ASYSTENT 2 2 92/9/ 92/9/ 48 48 9 9 3 3 Plan Plan wykonywania wykonywania ---------------------------------------------------------- ---------------------------------------------------------- SELECT SELECT STATEMENT STATEMENT Optimizer=ALL_ROWS Optimizer=ALL_ROWS (Cost=3 (Cost=3 Card=4 Card=4 Bytes=36 Bytes=36 ) ) TABLE TABLE ACCESS ACCESS (FULL) (FULL) OF OF 'PRACOWNICY' 'PRACOWNICY' (TABLE) (TABLE) (Cost=3 (Cost=3 Card=4 Card=4 Bytes=36) Bytes=36) Statystyki Statystyki ---------------------------------------------------------- ---------------------------------------------------------- recursive recursive calls calls db db block block gets gets 8 8 consistent consistent gets Logiczne I/O gets physical physical reads reads redo redo size size 83 83 bytes bytes sent sent via via SQL*Net SQL*Net to to client client 427 427 bytes bytes received received via via SQL*Net SQL*Net from from client client 2 2 SQL*Net SQL*Net roundtrips roundtrips to/from to/from client client sorts sorts (memory) (memory) sorts sorts (disk) (disk) 2 2 rows rows processed processed

Zmiana celu optymalizacji Dla bieżącej sesji parametr OPTIMIZER_MODE CHOOSE: kosztowa (jeśli są statystyki) lub regułowa (domyślne w Oracle 9i) RULE: optymalizacja regułowa ALL_ROWS: kosztowa maksymalizująca przepustowość (domyślne w Oracle g) FIRST_ROWS: kosztowa minimalizująca czas odpowiedzi FIRST_ROWS_N: kosztowa minimalizująca łączny czas odczytania pierwszych N (,,,) krotek ALTER SESSION SET SET OPTIMIZER_MODE = FIRST_ROWS;

Statystyki Informacje charakteryzują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ść wiersza, dla wszystkich kolumn liczbę unikalnych wartości oraz wartość minimalną i maksymalną dane generowane dla indeksu: wysokość drzewa, liczbę bloków-liści drzewa, liczbę unikalnych wartości indeksu, średnią liczbę bloków-liści przypadającą na jedną wartość klucza indeksu, średnią liczbę bloków danych (w tabeli) przypadającą jedną wartość klucza indeksu, współczynnik zgrupowania, który określa na ile wiersze w tabeli są uporządkowane wg klucza indeksy.

Histogramy Szczegółowe statystyki opisujące rozkład wartości poszczególnych kolumn, przydatne w szczególności dla optymalizacji wykorzystania indeksów Liczba wierszy Przykład: 2 Dane: liczba wierszy 2 zakres wartości - 8 liczba przedziałów 6 Wartości kolumny 3 4 45 55 7 8

Zbieranie statystyk za pomocą pakietu DBMS_STATS GATHER_ INDEX_STATS --indeksu GATHER_TABLE_STATS --tabela, tabela, indeks, kolumny GATHER_SCHEMA_STATS --wszystkie obiekty w schemacie GATHER_DATABASE_STATS- wszystkie obiekty w bazie bazie danych EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','ZESPOLY'); EXEC DBMS_STATS.GATHER_TABLE_STATS( ownname=>'scott', tabname=>'pracownicy', estimate_percent=>dbms_stats.auto_sample_size, method_opt=>'for ALL ALL COLUMNS cascade=>true); EXEC DBMS_STATS.DELETE_TABLE_STATS('SCOTT','ZESPOLY');

Metody dostępu do tabeli Przegląd liniowy (ang. full scan) HWM DB_FILE_MULTIBLOCK_READ_COUNT Dostęp za pomocą adresu rekordu (ang. ROWID) ROWID Rozszerzony OOOOOO.FFF.BBBBBB.RRR O - numer obiektu w bazie danych F - względny numer pliku w przestrzeni tabel B - numer bloku w pliku R - numer rekordu w bloku Podstawowy FFFF.BBBBBBBB.RRRR

Rodzaje sortowania ORDER BY: sortowanie wyników zapytania SELECT ** FROM zespoly ORDER BY BY adres DESC; AGGREGATE: wyliczanie wartości funkcji grupowej SELECT MAX(zatrudniony) FROM pracownicy; GROUP BY: podział relacji na grupy SELECT etat, etat, AVG(placa_pod) FROM pracownicy GROUP BY BY etat; etat; UNIQUE: eliminacja duplikatów SELECT DISTINCT etat etat FROM pracownicy;

Indeks B*-drzewo SELECT ETAT, PLACA_POD FROM PRACOWNICY WHERE NAZWISKO = 'Frankowski'; Matysiak Matysiak Czyżak Czyżak Grzybowski Grzybowski Morzy Morzy Stefanowski Stefanowski Biały Biały Błażewicz Błażewicz Grzybowski Grzybowski Jezierski Jezierski Męciel Męciel Mizgajski Mizgajski Waligóra Waligóra Wożniak Wożniak Czyżak Czyżak Frankowski Frankowski Morzy Morzy Pawlak Pawlak

Przesłanki do utworzenia indeksu B*-drzewo na atrybutach często wykorzystywanych w warunkach selekcji, na atrybutach połączeniowych, tylko na atrybutach o dużej selektywności, na atrybutach rzadko modyfikowanych, na atrybutach będących kluczami obcymi (uniknięcie niepotrzebnego blokowania tabeli podrzędnej w przypadku operacji modyfikacji rekordów nadrzędnych) w systemach przetwarzania transakcyjnego - OLTP CREATE [[ UNIQUE ]] INDEX nazwa ON ON tabela(atrybut, atrybut2,..);..); CREATE UNIQUE INDEX i_id_prac ON ON pracownicy(id_prac); CREATE INDEX i_complex ON ON pracownicy(nazwisko, imie);

Metody dostępu do indeksu B*- drzewo unikalne przeglądnięcie (ang. unique scan) przeglądnięcie zakresu (ang. range scan) pełne przeglądnięcie (ang. full scan) odczyt blok po bloku - nawigacja po liściach stosowany również do sortowania szybkie pełne przeglądniecie (ang. fast full scan) odczyt wieloblokowy stosowany zamiast full table scan

Indeks bitmapowy PWG425 WAW3456 POZ3756 KTW3756 PNR8956 czerwony czarny czarny zielony czerwony fiat fiat BMW VW BMW SELECT count(*) FROM samochody WHERE kolor IN IN ('czerwony', zielony') AND marka='fiat' czerwony czarny zielony fiat BMW VW OR AND =

Przesłanki do utworzenia indeksu bitmapowego w systemach przetwarzania analitycznego - OLAP, na atrybutach o małej selektywności, na atrybutach rzadko modyfikowanych dla zapytań z poszukiwaniem wartości pustych dla zapytań z dużą liczbą warunków OR i AND CREATE BITMAP INDEX nazwa ON ON tabela (atrybut); CREATE BITMAP INDEX b_etat ON ON pracownicy(etat);

Indeks B*-drzewo vs. bitmapowy B* - drzewo skuteczny dla atrybutów z dużą dziedziną wartości efektywne wykonywanie operacji koniunkcji wielkość słabo zależna od wielkości dziedziny atrybutu bardzo wysoka współbieżność modyfikacji - blokada pojedynczego klucza indeksu niski koszt pojedynczej modyfikacji - modyfikacja pojedynczego klucza indeksu stosunkowo wysoki koszt modyfikacji grupy rekordów - każda wartość modyfikowana oddzielnie główne zastosowanie OLTP Bitmapowy skuteczny dla atrybutów z małą dziedziną wartości efektywne wykonywanie operacji alternatywy i koniunkcji wielkość bardzo silnie zależna od wielkości dziedziny atrybutu niska współbieżność modyfikacji - blokada całej bitmapy wysoki koszt pojedynczej modyfikacji - modyfikacji całej bitmapy (kompresja) stosunkowo niski koszt modyfikacji grupy rekordów - modyfikacja grupowa z możliwością zrównoleglenia główne zastosowanie OLAP

Indeksy oparte na wyrażeniach CREATE INDEX sum_placa ON ON pracownicy (placa_pod+nvl(placa_dod,)); 2 22 26 45 nazwisko płaca_pod płaca_dod Malina Nowak Kowal scott 4 45 7 2 2 5 SELECT ** FROM pracownicy Struktura fizyczna: WHERE placa_pod+nvl(placa_dod,) < 3; 3; Bitmapowe B*-drzewa przyśpieszają operacje (selekcja, połączenie) na wyrażeniach, mogą zawierać funkcje zdefiniowane przez użytkownika zalecane dla wyrażeń umieszczanych w klauzuli ORDER BY

Połączenia - nested loop Odczyt jednokrotny Tabela zewnętrzna Tabela wewnętrzna Odczyt wielokrotny AA BB CC DD 3 3 2 2 3 3 2 2 3 a b c d e e AA BB BB CC 3 2 2 3 CC DD 3 3 2 2 3 d a c b e d e 3 d Wynik połączenia

Połączenia - sort merge AA BB CC DD sortowanie 3 3 2 2 3 3 2 2 3 a b c d e e CC BB AA DD złączenie CC CC BB BB 2 2 3 3 3 3 2 2 3 3 AA 3 DD 3 2 2 3 3 2 2 3 b e a c d 3 d b e a c d d 3 d 3 d

Połączenia - hash join Wartości funkcji haszującej 2 Tabela zewnętrzna AA 3 BB 2 CC DD 3 FH FH AA 3 DD 3 CC BB 2 FH FH Tabela wewnętrzna 2 a b 2 c 3 d e Funkcja_haszująca= kolumna_połączeniowa mod 3 Wynik BB 2 CC BB 2 AA 3 DD 3 CC 2 2 3 3 a b c d d e 3 d e

SELECT id_prac FROM pracownicy WHERE placa_pod >; Połączenia indeksów Range scan(indeks na placa_pod) Fast Full Scan(indeksu na id_prac) placa_pod ROWID 6 6.............. 2 2.A.E join (hash) 2 2...... 4 4 ROWID id_prac.a.e 2 2.............. 4 4

Wskazówki (ang. hints) Wskazówki umożliwiają określenie następujących elementów pracy optymalizatora: rodzaj optymalizatora, cel optymalizacji, sposób dostępu do danych, kolejność łączonych tabel dla operacji połączenia, sposób realizacji połączenia Wskazówki umieszcza się w komentarzu bezpośrednio po klauzulach SELECT, INSERT, UPDATE, DELETE, przy czym pierwszym znakiem wskazówki musi być + (plus) SELECT /*+ /*+ FULL_SCAN(PRACOWNICY) */ */ nazwisko FROM pracownicy WHERE id_prac=;