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

Podobne dokumenty
Fizyczna struktura bazy danych w SQL Serwerze

Administracja i programowanie pod Microsoft SQL Server 2000

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

Optymalizacja zapytań SQL

Systemy GIS Tworzenie zapytań w bazach danych

Autor: Joanna Karwowska

Optymalizacja poleceń SQL Metody dostępu do danych

Język SQL, zajęcia nr 1

Wykład 8. SQL praca z tabelami 5

STROJENIE BAZ DANYCH: INDEKSY. Cezary Ołtuszyk coltuszyk.wordpress.com

Fizyczna struktura bazy danych Indeksy Optymalizacja. Fizyczna struktura bazy danych (c.d.) Tadeusz Pankowski

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Wykład 5. SQL praca z tabelami 2

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Relacyjne bazy danych. Podstawy SQL

Administracja i programowanie pod Microsoft SQL Server 2000

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

SQL (ang. Structured Query Language)

Administracja i programowanie pod Microsoft SQL Server 2000

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

Widok Connections po utworzeniu połączenia. Obszar roboczy

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

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

Tabela wewnętrzna - definicja

Wykład 05 Bazy danych

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

Paweł Rajba

Indeksowanie w bazach danych

Wykład 2. Relacyjny model danych

Relacyjne bazy danych. Podstawy SQL

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

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

Bazy danych 6. Klucze obce. P. F. Góra

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Bazy danych. dr inż. Arkadiusz Mirakowski

Przestrzenne bazy danych Podstawy języka SQL

Cwiczenie 4. Połączenia, struktury dodatkowe

Oracle PL/SQL. Paweł Rajba.

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

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

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

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

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

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

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

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

Język SQL, zajęcia nr 2

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

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

1 Instalowanie i uaktualnianie serwera SQL Server

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

Wykład XII. optymalizacja w relacyjnych bazach danych

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

Internetowe bazy danych

Relacji między tabelami klucze obce. Schemat bazy danych, wczytanej z pliku create_tables.sql. Klucz obcy jako ograniczenie dla kolumny

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

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

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

Ref. 7 - Język SQL - polecenia DDL i DML

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Wykład 4. SQL praca z tabelami 1

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Wykład 6. SQL praca z tabelami 3

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

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Przykładowa baza danych BIBLIOTEKA

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Optymalizacja poleceń SQL Wprowadzenie

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Bazy danych - Materiały do laboratoriów VIII

Optymalizacja poleceń SQL Indeksy

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

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

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

Microsoft SQL Server Podstawy T-SQL

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

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

Oracle PL/SQL. Paweł Rajba.

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

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

Programowanie obiektów

Instrukcja CREATE TABLE

a) ile wynosiła populacja najbardziej i najmniej ludnego z województw (oraz jakie były ich nazwy)

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

dr inż. Jarosław Forenc

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

Bazy danych 7. SQL podstawy

Dr Michał Tanaś(

Fizyczna organizacja danych w bazie danych

Zarządzanie obiektami bazy danych Oracle11g

Bazy danych. Polecenia SQL

System Oracle podstawowe czynności administracyjne

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

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Transkrypt:

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

Struktura tabeli Data dane LOB - Large Objects (bitmapy, teksty) Row-Overflow zawiera dane typu varchar, varbinary http://msdn.microsoft.com/en-us/library/ms189051(v=sql.105).aspx

Fizyczna struktura bazy danych Dane zapisywane są w 8-KB ciągłych obszarach zwanych stronami (page) numerowanymi automatycznie od 0 do n. Pojedynczy wiersz tabeli nie może być zapisany na kilku stronach, ale na jednej stronie może być zapisanych kilka wierszy. Strony łączone są w 64 KB zakresy (extent), a więc w jeden zakres wchodzi kolejne 8 stron. W jednym zakresie może znajdować się kilka (małych) tabel. Kolejność zapisu wierszy na stronach nie jest w żaden sposób uporządkowana, chyba że został utworzony indeks klastrowany (clustered).

Strona - page Każda strona rozpoczyna się od 96 B nagłówka, w którym zapisywane są dane systemowe: numer strony, typ strony, ilość wolnego miejsca na stronie. identyfikator obiektu, do którego należy ta strona.

Zapis wierszy na stronie Dane wierszy są zapisywane na stronie w sposób ciągły zaczynając od pierwszego bajta po nagłówku. Tablica przesunięć (offset) wierszy umieszczona jest na końcu strony, każdy wiersz umieszczony na stronie posiada jeden wpis w tabeli przesunięć. W tabeli przesunięć zapisywana jest odległość w bajtach początku wiersza od początku strony. Kolejność wpisów w tabeli przesunięć jest przeciwna do kolejności wierszy na stronie.

Zapis wierszy > 8KB Jeden wiersz nie może być zapisany na kilku stronach, jednak część danych wiersza może zostać przeniesiona do osobnej tabeli. Maksymalny rozmiar wiersza to 8,060 bajtów (8 KB), jednak z pominięciem danych zapisywanych w kolumnach typu Text/Image. Od SQL Serwer 2005, to ograniczenie zostało rozszerzone o kolumny o zmiennej długości typu varchar, nvarchar, varbinary i sql_variant. Jeśli wiersz przekracza 8,060 bajtów, SQL Server automatycznie przenosi jedną lub kilka wartości z kolumn o zmiennej długości na strony w ROW_OVERFLOW_DATA allocation unit, rozpoczynając od kolumny o największej długości. W miejsce przeniesionej wartości wpisywany jest 24 bajtowy wskaźnik w IN_ROW_DATA allocation unit na oryginalnej stronie. Jeśli wskutek kolejnej operacji zostanie zmniejszona wielkość wiersza, SQL Server automatycznie przeniesie dane z powrotem na stronę.

Podział stron Próba dodania nowego wiersza do pełnej strony powoduje wstawienie nowej strony i zapis wiersza na nowej stronie http://sqlblogcasts.com/blogs/tonyrogerson/archive/2007/06/28/what-is-a-page-split-what-happens-whydoes-it-happen-why-worry.aspx

Podział stron Z tego powodu strony często zawierają puste miejsca. Jest to niekorzystne z punktu widzenia ilości przestrzeni dyskowej zajmowanej przez bazę danych, ale może być korzystne w przypadku wstawiania danych w wolne miejsca (np. w przypadku korzystania z indeksu grupującego). Przykład podziału stron

Typy zakresów Zakres jest jednorodny (uniform), gdy wszystkie strony tego zakresu przynależą tylko do jednego obiektu. Zakres jest mieszany (mixed), gdy jego strony przynależą do różnych obiektów. Każda z ośmiu stron może należeć do innego obiektu.

INDEKSY

Indeksy Indeks zawiera posortowaną (logicznie) kopię zbioru wartości jednej lub kilku kolumn z danej tabeli. Z każdą wartością w indeksie jest związana specjalna wartość, wskazująca, gdzie fizycznie można znaleźć wiersz, z którego ta wartość pochodzi. Ponieważ indeks jest zbiorem posortowanym, SZBD potrafi szybko znaleźć właściwą wartość i odpowiadający jej wiersz tabeli

Indeksy Indeks może być określony dla kolumny (kolumn) klucza głównego lub dla innej (innych) kolumn często wykorzystywanych w kryteriach wyszukiwania. Indeks jest strukturą danych zwiększającą szybkość wykonywania operacji wyszukiwania. Indeksy spowalniają operacje wstawiania, usuwania i modyfikacji danych.

Zasady programowania Zwiększenie czasu wykonywania operacji spowodowane koniecznością uaktualniana wielu indeksów może być istotne tylko w przypadku wykonywania masowych operacji wstawiania lub aktualizowania danych. W pozostałych przypadkach (jedno lub kilkukrotnego wstawiania/aktualizowania danych) czas uaktualniania indeksów jest praktycznie niezauważalny. Z tego powodu dodanie indeksu do tabeli może być zdecydowanie korzystne dla użytkowników skracając czas potrzebny na uzyskanie danych z tabel.

Indeks klastrowany (CLUSTERED) Zwykle wiersze tabeli zapisywane są na stronach w przypadkowej kolejności. Jeśli jednak w tabeli został zdefiniowany indeks klastrowany, wiersze są zapisywane dokładnie w takiej kolejności, jaka wynika z wartości klucza użytego w indeksie. Ponieważ wiersze w bazie danych są fizycznie posortowane, indeksy klastrowane są bardzo wydajnym sposobem wyszukiwania wierszy. Tabela może posiadać tylko jeden indeks klastrowany. Każdy indeks klastrowany musi być unikalny.

Indes klastrowany http://msdn.microsoft.com/enus/library/ms177443(v=sql.105).aspx

Indeks nieklastrowany Opcja indeksu NONCLUSTERED (nieklastrowany) jest standardową wartością każdego indeksu i nie musi być specyfikowana podczas tworzenia indeksu. Wiersze w tabeli pozbawionej indeksu klastrowanego są zapisywane w bazie danych w przypadkowy sposób. W takim przypadku tabela przypomina stertę (heap) na którym składowane są dane. Indeksy nieklastrowane mają strukturę niezależną od wierszy tabeli. Indeks nieklastrowany zawiera swój klucz (kolumny) indeksu oraz wskaźnik do wiersza w którym znajdują się dane.

Indeks unikalny (UNIQUE) Indeks klastrowany musi być unikalny. Natomiast indeksy nieklastrowane nie muszą być unikalne. Jeśli jednak dane składowane w kolumnie (lub kliku kolumnach) indeksu mają być unikalne, podczas definiowania indeksu można użyć opcji UNIQUE

Indeks nieklastrowany http://msdn.microsoft.com/enus/library/ms177484(v=sql.105).aspx

Tworzenie indeksu CREATE [UNIQUE CLUSTERED NONCLUSTERED] INDEX nazwa-indeksu ON nazwa-tabeli (nazwa-kolumny [ASC DESC] {, nazwa-kolumny [ASC DESC]}); Zapytanie tworzy indeks o podanej nazwie dla tabeli o podanej nazwie, określony dla kolumn o podanych nazwach CLUSTERED indeks klastrowany. Można utworzyć tylko 1 indeks klastrowany i 249 indeksów nieklastrowanych. UNIQUE wymusza niepowtarzalność wartości danych w kolumnach tworzących indeks.

Zasady programisty Indeks klastrowany powinien być tworzony dla kolumny (rzadziej: kilku kolumn) według której użytkownicy najczęściej przeszukują dane. Indeksy powinny być zakładane na kolumnach, z których: wykorzystywane są do łączenia tabel (klauzule FROM i JOIN) - w szczególności optymalne są złączenia po kombinacjach PRIMARY KEY FOREIGN KEY, wykorzystywane są do wyszukiwania danych w klauzuli WHERE, wykorzystywane są do grupowania danych w klauzuli GROUP BY wykorzystywane są do sortowania tabeli w klauzuli ORDER BY

Usuwanie indeksu DROP INDEX nazwa-indeksu ON nazwa-tabeli {,nazwa-indeksu ON nazwa-tabeli} Przy pomocy komendy DROP INDEX można usunąć tylko te indeksy, które zostały założone komendą CREATE INDEX.

Usuwanie PRIMARY KEY ALTER TABLE nazwa-tabeli DROP CONSTRAINT nazwa-primary-key Usuwanie indeksu opartego na kluczu własnym można wykonać jedynie poprzez usunięcie węzła integralności.

OPTYMALIZACJA

Optymalizacja Zapytania, podobnie jak pozostałe komendy T-SQL, przed skompilowaniem i wykonaniem są optymalizowane przez wewnętrzny proces Sewera SQL - Query Optimizer. Celem Query Optimizera jest znalezienie najszybszego sposobu wykonania zapytania. Decyzje podejmowane są na podstawie ilości operacji wejścia-wyjścia oraz ilości obliczeń mających być wykonanych przez procesor niezbędnych do wykonania zapytania. Query Optimizer szacuje koszt operacji wejścia-wyjścia na podstawie: struktury tabel, do których odwołuje się zapytanie i istniejących na tych tabelach indeksów. kosztu operacji złączenia tabelach źródłowych. istniejących lub tworzonych dynamicznie przez Query Optimizera statystyk opisujących dane źródłowe. metainformacji opisujących fizyczną strukturę tabel, w których zapisane są żądane dane.

Statystyki Ponieważ Query Optimizer oblicza koszt wykonania instrukcji na podstawie statystyk, nieaktualne lub nieadekwatne statystki spowodują utworzenie nieefektywnego planu jej wykonania. Wynikiem optymalizacji jest znalezienie takiego sposobu wykonania zapytania: który operuje na najmniejszej z możliwych liczby wierszy i w związku z tym wymaga odczytania najmniejszej liczby stron (8 KB spójnych bloków danych). którego całkowity czas przeprowadzania jest najkrótszy.

Statystyki [SET SHOWPLAN_TEXT ON SET SHOWPLAN_ALL ON GO] SET STATISTICS IO ON SET STATISTICS TIME ON Zapytanie-SQL Query Analyzer pozwala na wyświetlenie statystyk związanych z czasem (SET STATISTICS TIME) i liczbą operacji wejściawyjścia (opcja SET STATISTICS IO). Ponadto możemy wyświetlić opracowany przez Query Optimizer plan wykonania instrukcji (opcja SET SHOWPLAN_TEXT lub SET SHOWPLAN_ALL).

Statystyki Table 'MojaTabela'. Scan count 1, logical reads 79, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. scan count - ilość odwołań do tabeli źródłowej. logical reads - ilość stron danych odczytanych z pamięci podręcznej. physical reads ilość stron danych odczytanych z dysku. Ta liczba nigdy nie jest większa od liczby stron odczytanych z pamięci podręcznej. Na podstawie tych dwóch wartości można obliczyć współczynnik trafień: współczynnik trafień = (logical reads physical reads) / logical reads, read-ahead reads określa liczbę stron umieszczoną w pamięci podręcznej, lob Large object.

Statystyki Argumenty wywołania operacji Koszt wykonania operacji i jego szacunkowy udział w koszcie wykonania instrukcji (Cost), Koszt wykonania operacji i operacji przez nią wywołanych (Subtree cost), Ilość wykonania operacji w ramach instrukcji (Number of executes), Ilość zwróconych przez operację wierszy (Row count), Szacunkową wielkość zwróconych przez operację wierszy (Estimated row size), Szacunkowy koszt operacji wejściawyjścia przeprowadzonych przez operację (I/O cost), Szacunkowy koszt wykorzystania zasobów procesora przez operację (CPU cost).