Optymalizacja poleceń SQL Statystyki

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

Ć wiczenie 3. Statystyki, wskazó wki

Optymalizacja poleceń SQL Metody dostępu do danych

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

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

Optymalizacja poleceń SQL Wprowadzenie

Cwiczenie 2. Metody dostępu do danych

Wykład XII. optymalizacja w relacyjnych bazach danych

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

Optymalizacja poleceń SQL

Cwiczenie 4. Połączenia, struktury dodatkowe

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

Optymalizacja poleceń SQL Indeksy

Optymalizacja poleceń SQL

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

Ćwiczenie 5. Strojenie poleceń SQL

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

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

Kosztowy optymalizator zapytań

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

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

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

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

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

Język SQL. Rozdział 2. Proste zapytania

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

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Rozproszone bazy danych 3

Administracja i programowanie pod Microsoft SQL Server 2000

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

Fizyczna struktura bazy danych w SQL Serwerze

Systemy GIS Tworzenie zapytań w bazach danych

Tabela wewnętrzna - definicja

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

Wpływ ustawień parametru wieloblokowego sekwencyjnego czytania danych na czas wykonywania zapytania SQL w bazie danych Oracle 11g

Uprawnienia, role, synonimy

SQL (ang. Structured Query Language)

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Cwiczenie 1. Wys wietlanie plano w wykonania polecen SQL

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

Cwiczenie 7. Retrospekcja

DBPLUS Performance Monitor opis zmian w wersji

Oracle PL/SQL. Paweł Rajba.

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

Typy Oracle atrybutów relacji Typ NUMBER (1)

Typy Oracle atrybutów relacji Typ NUMBER (1)

Wykład 6. SQL praca z tabelami 3

Optymalizacja wydajności SZBD

Wydajność hurtowni danych opartej o Oracle10g Database

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

Indeksy. Indeks typu B drzewo

Zarządzanie obiektami bazy danych Oracle11g

Modelowanie wymiarów

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. UŜytkownicy i schematy (2) UŜytkownicy i schematy (1) baza danych: ZESP99

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

Przykładowe B+ drzewo

Przestrzenne bazy danych Podstawy języka SQL

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

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

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

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Relacyjne bazy danych. Podstawy SQL

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

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

Ogólny plan przedmiotu. Strony WWW. Literatura BAZY DANYCH. Materiały do wykładu:

Tadeusz Pankowski

Oracle11g: Wprowadzenie do SQL

Wykład 5: PHP: praca z bazą danych MySQL

Zadania do wykonania na laboratorium

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

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

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

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Wprowadzenie do języka SQL

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

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Zapytania z ograniczeniem czasowym w Oracle

Relacyjne bazy danych. Podstawy SQL

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

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

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

Zbiór pytań nr 5. 2 Które stwierdzenie opisuje najlepiej zbiór uprawnień dostępny po wykonaniu

Bazy danych. Polecenia SQL

Haszowanie (adresowanie rozpraszające, mieszające)

Definicja pliku kratowego

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

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

Fizyczna organizacja danych w bazie danych

Język PL/SQL. Rozdział 2. Kursory

SQL*Loader. Export/Import

Partycjonowanie. Partycjonowanie tabel (1)

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Bazy Danych i Usługi Sieciowe

PODSTAWY BAZ DANYCH Wykład 6 4. Metody Implementacji Baz Danych

- 307 W Oracle instrukcja SELECT Ename FROM Emp WHERE Empno=4567: [ ] zakłada blokadę do odczytu dla jednego wiersza tabeli Emp [ ] zakłada blokadę

SQL do zaawansowanych analiz danych część 1.

Transkrypt:

Optymalizacja poleceń SQL Statystyki 1

Statystyki (1) Informacje, opisujące dane i struktury obiektów bazy danych. Przechowywane w słowniku danych. Używane przez optymalizator do oszacowania: selektywności predykatów polecenia, kosztu użycia ścieżek dostępu, kosztu operacji I/O i czasu procesora, kosztu planu wykonania polecenia. Tylko aktualne statystyki użyteczne! Statystyki są statyczne nie są automatycznie uaktualniane przy zmianie danych. 2

Statystyki (2) Przykłady statystyk: dla relacji: liczba rekordów, liczba bloków, średnia długość rekordu, dla atrybutu relacji: liczba różnych wartości, liczba rekordów, w których atrybut ma wartość pustą, rozkład wartości (histogram), dla indeksu: liczba bloków-liści, wysokość drzewa, wskaźnik zgrupowania indeksu, statystyki systemowe: wykorzystanie procesora, liczba operacji we/wy. 3

Statystyki (3) Statystyki mogą być gromadzone automatycznie (przez dedykowany proces SZBD) lub ręcznie (na żądanie użytkownika) przy użyciu pakietu DBMS_STATS. W przypadku braku statystyk dla obiektów używanych w zapytaniu przed wykonaniem zapytania optymalizator realizuje dynamiczne próbkowanie statystyk. 4

Histogramy (1) Histogram szczegółowa statystyka opisująca rozkład wartości określonej kolumny relacji. Rodzaje: histogram o zrównoważonej wysokości (ang. height balanced) zbiór wartości kolumny dzielony jest na przedziały o tej samej (w przybliżeniu) liczbie rekordów; przykład (zakres wartości: <1, 100>, liczba przedziałów: 10): równomierny rozkład wartości atrybutu: 1 10 20 30 40 50 60 70 80 90 100 nierównomierny rozkład wartości atrybutu: 1 10 10 10 30 40 40 40 65 80 100 5

Histogramy (2) Rodzaje (cd): histogram częstotliwości (ang. frequency) każda wartość kolumny odpowiada jednemu przedziałowi, każdy przedział zawiera liczbę wystąpień tej wartości; tworzony wtedy, gdy liczba wartości kolumny jest mniejsza bądź równa żądanej liczbie przedziałów histogramu. Histogramy należy tworzyć tylko dla kolumn z nierównomiernym rozkładem wartości (ang. skewed data), często używanych w warunkach zapytania. Gdy zmieni się rozkład danych kolumny, konieczne jest ponowne wygenerowanie histogramu, 6

Ręczne zbieranie statystyk Metody: na podstawie pełnych danych, szacowanie na podstawie próbki, próbka określana w procentach liczby rekordów. Procedury zbierające statystyki: DBMS_STATS.GATHER_INDEX_STATS dla indeksu, DBMS_STATS.GATHER_TABLE_STATS dla relacji. Procedury usuwające statystyki: DBMS_STATS.DELETE_INDEX_STATS dla indeksu, DBMS_STATS.DELETE_TABLE_STATS dla relacji, DBMS_STATS.DELETE_COLUMN_STATS dla kolumny. 7

Zbieranie statystyk dla indeksu exec DBMS_STATS.GATHER_INDEX_STATS( ownname => <nazwa_schematu>, indname => <nazwa_indeksu>, estimate_percent => <procentowa_wielkość_próbki>); jeśli wartość <procentowa_wielkość_próbki> określono jako: null, wówczas statystyki zbierane na podstawie pełnych danych, liczbę z przedziału <0,00001; 100>, wówczas szacowanie na podstawie próbki o zadanym rozmiarze, DBMS_STATS.AUTO_SAMPLE_SIZE rozmiar próbki dobiera system. exec DBMS_STATS.GATHER_INDEX_STATS( ownname => 'SCOTT', indname => 'PK_PRAC', estimate_percent => 20); Uwaga! Od Oracle10g statystyki dot. indeksów są gromadzone automatycznie podczas tworzenia lub przebudowy indeksu. 8

Zbieranie statystyk dla relacji (1) exec DBMS_STATS.GATHER_TABLE_STATS( ownname => <nazwa_schematu>, tabname => <nazwa_relacji>, estimate_percent => <procentowa_wielkość_próbki>, method_opt => <rodzaj_statystyk>, cascade =><DBMS_STATS.AUTO_CASCADE TRUE FALSE> ); METHOD_OPT określa zakres zbieranych statystyk: FOR TABLE tylko statystyki dla tabeli bez statystyk dla kolumn, FOR ALL COLUMNS [<klauzula SIZE>] statystyki dla tabeli i statystyki dla wszystkich kolumn, FOR ALL INDEXED COLUMNS [<klauzula SIZE>] statystyki dla tabeli i statystyki dla poindeksowanych kolumn, FOR COLUMNS [<klauzula SIZE>] kolumna1 [<klauzula SIZE>], kolumna2 [<klauzula SIZE>],... statystyki dla tabeli i statystyki dla wskazanych kolumn. 9

Zbieranie statystyk dla relacji (2) <klauzula SIZE> SIZE { liczba REPEAT AUTO SKEWONLY }: liczba liczba przedziałów w histogramie, zakres: <1, 254>, REPEAT powtórzenie zbierania histogramów dla kolumn, które mają już histogramy, AUTO SZBD określi, dla których kolumn zbierać histogramy na podstawie obciążenia i rozkładu danych kolumny, SKEWONLY SZBD określi, dla których kolumn zbierać histogramy tylko na podstawie rozkładu danych kolumny (bez analizy obciążenia). FOR ALL COLUMNS SIZE AUTO wartość domyślna dla par. METHOD_OPT: statystyki tabeli, podstawowe statystyki wszystkich kolumn tabeli, histogramy dla kolumn wyznaczonych na podstawie wcześniejszych obserwacji dotyczących obciążenia i rozkładu wartości. 10

Zbieranie statystyk dla relacji (3) exec DBMS_STATS.GATHER_TABLE_STATS( ownname => 'SCOTT', tabname => 'PRACOWNICY', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR COLUMNS placa_pod SIZE AUTO, nazwisko SIZE AUTO'); exec DBMS_STATS.GATHER_TABLE_STATS( ownname => 'SCOTT', tabname => 'PRACOWNICY', method_opt => 'FOR ALL INDEXED COLUMNS', cascade => TRUE); Uwaga! Od Oracle12c statystyki dotyczące tabel zostają zebrane automatycznie w sytuacji, gdy tabela, do której ładowane są dane ścieżką bezpośrednią (polecenie INSERT /*+ APPEND */, dane umieszczane od razu w plikach bazy danych z pominięciem bufora bazy danych), była poprzednio pusta: tabela została dopiero co utworzona i nie posiada jeszcze rekordów, lub usunięto z tabeli wszystkie rekordy. 11

Statystyki w słowniku bazy danych Dla relacji: USER_TABLES, USER_TAB_STATISTICS Dla kolumn: USER_TAB_COLUMNS, USER_TAB_COL_STATISTICS, USER_TAB_HISTOGRAMS Dla indeksów: USER_INDEXES, USER_IND_STATISTICS SELECT num_rows, blocks, last_analyzed, sample_size FROM USER_TAB_STATISTICS WHERE table_name = 'PRACOWNICY'; SELECT num_distinct, low_value, high_value, num_buckets, histogram FROM USER_TAB_COL_STATISTICS WHERE table_name = 'PRACOWNICY' AND column_name = 'NAZWISKO'; 12

Usuwanie statystyk exec DBMS_STATS.DELETE_INDEX_STATS( ownname => <nazwa_schematu>, indname => <nazwa_indeksu>); exec DBMS_STATS.DELETE_TABLE_STATS( ownname => <nazwa_schematu>, tabname => <nazwa_relacji>); exec DBMS_STATS.DELETE_COLUMN_STATS( ownname => <nazwa_schematu>, tabname => <nazwa_relacji>, colname => <nazwa_kolumny>, col_stat_type => <rodzaj_usuwanych_statystyk>); COL_STAT_TYPE: HISTOGRAM usuwany jest histogram dla kolumny, podstawowe statystyki kolumny pozostają, ALL usuwane są wszystkie statystyki dla kolumny (wartość domyślna). 13

Wskaźnik zgrupowania indeksu (1) Minimalną jednostką operacji I/O jest blok dyskowy a nie rekord Statystyka, pozwalająca na porównanie kosztu operacji przeglądnięcia indeksu z kosztem pełnego przeglądnięcia tabeli Określa, jak mocno indeks jest "zsynchronizowany" z tabelą: mała wartość rekordy tabeli z tymi samymi (lub zbliżonymi) wartościami poindeksowanej kolumny są skupione w niewielkiej liczbie bloków duża wartość rekordy tabeli z tymi samymi (lub zbliżonymi) wartościami poindeksowanej kolumny są rozproszone w dużej liczbie bloków 14

Wskaźnik zgrupowania indeksu (2) Interpretacja: mała wartość (równa lub bliska liczbie bloków tabeli) dobrze, użycie indeksu jest korzystne w stosunku do pełnego przeglądnięcia tabeli z powodu konieczności wykonania mniejszej liczby operacji odczytu bloków tabeli (odczytu danych) po dostępie do indeksu (po odczycie adresów rekordów) duża wartość (równa lub bliska liczbie rekordów tabeli) źle, użycie indeksu jest niekorzystne w stosunku do pełnego przeglądnięcia tabeli z powodu konieczności wykonania większej liczby operacji odczytu bloków tabeli po dostępie do indeksu Słownik danych SELECT clustering_factor FROM user_indexes WHERE index_name = PRAC_PK ; 15

Wskaźnik zgrupowania indeksu (3) Przykład tabela posiada 9 rekordów, poindeksowana kolumna K1 posiada trzy wartości A, B i C (po trzy rekordy), rekordy zajmują 3 bloki. Przypadek 1. Mała wartość wskaźnika. Niski koszt skanu indeksu odczyt A wymaga dostępu do jednego bloku tabeli BLOK 1 BLOK 2 BLOK 3 A A A B B B C C C Przypadek 2. Duża wartość wskaźnika. Wyższy koszt skanu indeksu odczyt A wymaga dostępu do wszystkich trzech bloków tabeli BLOK 1 BLOK 2 BLOK 3 A B C A B C A B C 16