19
ITA-101 Bazy Danych Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4 Wersja 1.0 Wewnętrzna struktura bazy danych Spis treści Wewnętrzna struktura ......................................................................................................................... 1 Informacje o module ............................................................................................................................ 2 Przygotowanie teoretyczne ................................................................................................................. 3 Przykładowy problem .................................................................................................................. 3 Podstawy teoretyczne.................................................................................................................. 3 Przykładowe rozwiązanie............................................................................................................. 8 Porady praktyczne ..................................................................................................................... 11 Uwagi dla studenta .................................................................................................................... 12 Dodatkowe źródła informacji..................................................................................................... 12 Laboratorium podstawowe ................................................................................................................ 13 Problem 1 (czas realizacji 25 min).............................................................................................. 13 Problem 2 (czas realizacji 20 min).............................................................................................. 17 Laboratorium rozszerzone ................................................................................................................. 19 Zadanie 1 (czas realizacji 90 min)............................................................................................... 19

Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Embed Size (px)

Citation preview

Page 1: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

ITA-101 Bazy Danych

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski

Moduł 4

Wersja 1.0

Wewnętrzna struktura bazy danych

Spis treści

Wewnętrzna struktura ......................................................................................................................... 1

Informacje o module ............................................................................................................................ 2

Przygotowanie teoretyczne ................................................................................................................. 3

Przykładowy problem .................................................................................................................. 3

Podstawy teoretyczne.................................................................................................................. 3

Przykładowe rozwiązanie ............................................................................................................. 8

Porady praktyczne ..................................................................................................................... 11

Uwagi dla studenta .................................................................................................................... 12

Dodatkowe źródła informacji..................................................................................................... 12

Laboratorium podstawowe ................................................................................................................ 13

Problem 1 (czas realizacji 25 min) .............................................................................................. 13

Problem 2 (czas realizacji 20 min) .............................................................................................. 17

Laboratorium rozszerzone ................................................................................................................. 19

Zadanie 1 (czas realizacji 90 min) ............................................................................................... 19

Page 2: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 2/19

Informacje o module

Opis modułu

W tym module znajdziesz informacje, w jaki sposób w SQL Server 2008

przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki

sposób przechowywane są podstawowe obiekty w bazie danych. Dowiesz

się również w jaki sposób należy wyznaczać wielkość pliku danych.

Cel modułu

Celem modułu jest zapoznanie czytelnika z wewnętrzną strukturą

przechowywania danych w SQL Server 2008.

Uzyskane kompetencje

Po zrealizowaniu modułu będziesz:

• Wiedział, w jaki sposób zbudowane są strony danych (nagłówek

strony, wiersze danych, tablica przesunięć wierszy)

• potrafił badać zawartość stron danych używamy instrukcji DBCC

PAGE, która umożliwia oglądanie nagłówka strony, wierszy danych i

tablicy przesunięć wierszy

• wiedział jak wygląda struktura wierszy danych

• potrafił wyświetlić i przeanalizować wiersze danych zapisane w

tabelach

Wymagania wstępne

Przed przystąpieniem do pracy z tym modułem powinieneś:

• potrafić budować diagram ERD (patrz: moduł 1)

• wiedzieć, w jaki sposób tworzy się nową bazę danych

• wiedzieć, w jaki sposób tworzy się podstawowe obiekty bazy danych

Mapa zależności modułu

Zgodnie z mapą zależności przedstawioną na rys. 1, przed przystąpieniem

do realizacji tego modułu należy zapoznać się z materiałem zawartym

w modułach 1 i 3.

Moduł 4

Dodatek

Moduł 1

Moduł 2

Moduł 3

Moduł 5

Moduł 6

Moduł 7

Moduł 8

Moduł 9

Moduł 10

Moduł 11

Moduł 12

Moduł 13

Rys. 1 Mapa zależności modułu

Page 3: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 3/19

Przygotowanie teoretyczne

Przykładowy problem

Jak zapewne wiesz, z SQL Server 2008 można korzystać w bardzo efektywny sposób nie mając

wiedzy na temat sposobu wewnętrznej organizacji danych, jednak w wielu przypadkach dobrze jest

wiedzieć, jak takie przechowywane dane są zorganizowane. Ułatwia to zrozumienie wielu

mechanizmów funkcjonujących w SQL Server 2008.

Typowy problem pojawiający się w tym zagadnieniu jest następujący. Mamy zaprojektowaną bazę

danych, zbudowany diagram ERD, zdefiniowane relacje oraz przypisane atrybutom typy danych.

Nie zawsze jednak etap projektowania jest przeprowadzony we właściwy sposób. Wiedząc w jaki

sposób zorganizowane są dane możemy lepiej dobierać typy danych na atrybutach mając

świadomość tego, gdzie fizycznie są one umieszczone. Możemy uniknąć pewnych błędów, na

przykład co do doboru wielkości typu danych. Szczególnie duże znaczenie ma to w przypadku

obiektów typu OLE.

Kolejnym problemem pojawiającym się w tym zagadnieniu jest próba odpowiedzenia sobie na

pytanie, jaka powinna być początkowa wielkość pliku danych i dziennika transakcji w momencie,

kiedy wiemy, ile danych ma zostać wpisanych do naszej bazy. Na podstawie tej informacji w

kolejności możemy ustawić, o ile pliki danych i dziennika transakcji mają wzrosnąć.

Z punktu widzenia administracji bazą danych są to bardzo ważne problemy, które możemy

rozwiązać dzięki znajomości budowy wewnętrznej struktury w SQL Server 2008.

Podstawy teoretyczne

Chociaż z SQL Server można korzystać efektownie bez znajomości wewnętrznej budowy,

zrozumienie szczegółów przechowywania danych pomaga w pisaniu wydajnych aplikacji.

Gdy tworzy się tabelkę, do wielu katalogów systemowych wstawiane są rekordy z informacjami

niezbędnymi do jej obsługi. Wiersze są dodawane do katalogów systemowych sysobjects,

sysindexes i syscolumns.

Dla każdej nowo utworzonej tabeli do widoku sysobjects dodawany jest wiersz zawierający

nazwę, identyfikator obiektu oraz właściciela nowej tabeli. Widok syscolumns otrzymuje dla

każdej kolumny z nowej tabeli informacje zawierające nazwę kolumny, typ danych i długość. Każda

z kolumn otrzymuje unikatowy identyfikator, który wyznacza kolejność, w jakiej zostały kolumny

zdefiniowane w tabeli.

Na rys. 2 pokazano wiersze, które dodawane są do widoku sysobjects i columns podczas

tworzenia tabeli Ksiazka.

Rys. 2 Informacje katalogowe zapisane po utworzeniu tabeli

Page 4: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 4/19

Strony danych

Strony danych są strukturami zawierającymi wszystkie dane (z wyjątkiem text i image), których

stały rozmiar wynosi 8 KB (8192 bajtów). Składają się one z trzech elementów (rys. 3): nagłówka

strony, wierszy danych i tablicy przesunięć wierszy.

Rys. 3 Struktura strony danych

Nagłówek strony

Nagłówek strony danych zawiera pierwszych 96 bajtów strony danych. Informacje zawarte w

nagłówku pokazano w tab. 1.

Tab. 1 Informacje zawarte w nagłówku strony

Pole Zawartość

m_poleID Numer pliku i numer strony bazy danych.

m_nextPage Numer pliku i nazwa następnej strony. Parametr wyświetlany jeżeli

bieżąca strona należy do łańcucha stron.

m_prev_Page Numer pliku i nazwa poprzedniej strony. Parametr wyświetlany jeżeli

bieżąca strona należy do łańcucha stron.

m_objID Identyfikator obiektu, do którego należy bieżąca strona.

m_lsn Numer LSN używany do modyfikowania tej strony.

m_slotCnt Łączna liczba wierszy tej strony.

m_level Poziom strony w indeksie. Dla stron liści wartość zawsze równa 1.

IndexId Identyfikator indeksu strony. Dla stron danych zawsze wartość równa 1.

m_freeData Przesunięcie bajtowe pierwszego wolnego obszaru na tej stronie.

pminlen Liczba bajtów części wiersza zawierającej pola o stałej długości.

m_freeCnt Liczba niewykorzystanych bajtów na stronie.

m_reservedCnt Liczba bajtów zarezerwowanych przez wszystkie transakcje.

m_xactReserved Liczba bajtów zarezerwowanych przez ostatnio uruchomiona transakcje.

m_flagBits 2-bajtowy ciąg bitów zawierający dodatkowe informacje o stronie.

Page 5: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 5/19

Wiersze danych

Za nagłówkiem znajduje się obszar, w którym przechowywane są dane tabeli. Maksymalny rozmiar

pojedynczego wiersza danych wynosi 8060 bajtów. Wiersz danych nie może obejmować kilku stron.

Wyjątek stanowią kolumny, którym przypisano typ image lub text. Należy zauważyć, iż liczba

wierszy może się różnić w zależności od struktury tabeli oraz przechowywanych danych. Tabele,

które posiadają kolumny o stałej długości będą zawierały na każdej stronie taką samą liczbę wierszy

danych, natomiast tabele zawierające kolumny o różnych długościach będą zawierały na każdej

stronie różną liczbę wierszy danych.

Tablica przesunięć wierszy

Tablica przesunięć wierszy jest blokiem 2-bajtowych wpisów, z których każdy stanowi przesunięcie

na stronie, od którego zaczynają się właściwe dane wiersza. Należy pamiętać o tym, że bajty te nie

są zapisywane w wierszu razem z danymi. Wpływają one jednak na liczbę wierszy mieszczących się

na stronie.

Badanie stron danych

Do badania zawartości stron danych używamy instrukcji DBCC PAGE, która umożliwia oglądanie

nagłówka strony, wierszy danych i tablicy przesunięć wierszy dla każdej strony bazy danych.

Polecenia tego może używać tylko administrator systemu. Składnię polecenia DBCC PAGE

pokazano poniżej:

DBCC PAGE ({id_bazy | nazwa_bazy}, numer_pliku, numer_strony[, opcje])

W tab. 2 zostały opisane podstawowe parametry instrukcji DBCC PAGE.

Tab. 2 Parametry polecenia DBCC PAGE

Parametr Opis

id_bazy Identyfikator bazy danych.

nazwa_bazy Nazwa bazy danych.

numer_pliku Numer pliku zawierającego stronę

numer_strony Numer strony w obrębie pliku.

opcje Parametr ustawiany opcjonalnie przyjmuje następujące

wartości:

• 0 – domyślnie. Zwraca informacje o nagłówku bufora i

nagłówku strony.

• 1 – zwraca informacje o nagłówku bufora, nagłówku

strony, każdym wierszu (osobno) oraz tablicę przesunięć

wierszy.

• 2 – zwraca informacje o nagłówku bufora, nagłówku

strony, zawartość całej strony oraz tablicę przesunięć

wierszy.

• 3 – zwraca informacje o nagłówku bufora, nagłówku

strony, każdym wierszu (osobno) oraz tablicę przesunięć

wierszy, a po każdym wierszu listę poszczególnych

wartości kolumn.

Przykładowy wynik działania instrukcji DBCC PAGE pokazano na rys. 4.

Page 6: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 6/19

Rys. 4 Przykładowy wydruk instrukcji DBCC PAGE

Wydruk instrukcji DBCC PAGE składa się z czterech sekcji:

1. BUFFER – przedstawia informacje o buforze danej strony.

2. PAGE HEADER – pokazuje dane dla pól nagłówka strony.

3. DATA – zawiera informacje o każdym wierszu tabeli. Dane strony dzielone są na trzy części.

Część pierwsza (lewa kolumna) określa położenie bajtowe w obrębie wiersza, część druga

(środkowe cztery kolumny) zawiera właściwe dane zapisane na stronie, zaś część trzecia

(prawa kolumna) zawiera znakową reprezentacje danych.

4. OFFSET TABLE – pokazuje zawartość tablicy przesunięć wierszy, która znajduje się na końcu

strony. Pierwszy wiersz fizycznie znajdujący się na stronie jest wierszem numer 6, z

przesunięciem w tablicy przesunięć równym 96.

Struktura wiersza danych

Na rys. 5 pokazano ogólną strukturę wierszy danych. Na pierwszym miejscu znajdują się dane

kolumn o stałej długości. Za nimi znajdują się dane wszystkich kolumn o zmiennej długości.

Page 7: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 7/19

Rys. 5 Struktura wierszy danych

W każdym bloku o stałej długości lub danych o zmiennej długości dane są przechowywane w

kolejności w jakiej kolumny zostały zdefiniowane przy tworzeniu tabeli. Przyjrzyjmy się poniższemu

przykładowi:

CREATE TABLE Proba { Kolumna_1 int NOT NULL, Kolumna_2 char(25) NOT NULL, Kolumna_3 varchar(60) NULL, Kolumna_4 int NOT NULL, Kolumna_5 varchar(20) NOT NULL }

W powyższym przykładzie w części związanej z danymi o stałej długości wiersze będą zawierały

najpierw dane kolumny Kolumna_1 następnie Kolumna_2 i wreszcie Kolumna_4. W następnej

kolejności będą występowały dane o zmiennej długości związane odpowiednio z Kolumną_3 i

Kolumna_5.

Tablice przesunięć kolumn

Wiersz danych, który ma kolumny o stałej długości, nie zawiera licznika zmiennych kolumn ani

tablicy przesunięć kolumn. Wiersz danych, w którym znajdują się kolumny o zmiennej długości,

zawiera tablicę przesunięć kolumn.

Połączenia stron

W SQL Server 2008 strony łączone są ze sobą na każdym poziomie indeksu. Jedynym sposobem, w

jaki SQL Server określa, które strony należą so tabeli, jest zaglądanie do stron IAM tabeli.

Poleceniem DBCC EXTENTINFO można uzyskać listę wszystkich obszarów należących do obiektu.

W poniższym przykładzie pokazano listę wszystkich obszarów należących do obiektu Orders w

bazie danych Northwind.

Osiem pierwszych wierszy wskazuje rozmiar obszaru (ext_size) równy 1. Wynika to z tego, że

pierwszych osiem stron w tabeli alokowanych jest z obszarów mieszanych. Gdy tabela osiągnie

osiem stron, wówczas SQL Server przydziela jej obszary jednolite po osiem stron każdy.

Page 8: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 8/19

Rys. 6 Wydruk wszystkich obszarów należących do obiektu

Rozmiar danych

Znając strukturę tabel oraz typy danych kolumn w bazie danych, możemy oszacować rozmiar pliku

danych.

Procedura szacowania rozmiaru pliku danych przebiega według następującego schematu:

1. Na podstawie tabeli określamy rozmiar pojedynczego wiersza. Dla typów danych o stałym

rozmiarze dodajemy liczbę bajtów poszczególnych kolumn, zaś dla typów o zmiennym

rozmiarze przyjmujemy wartość średnią.

2. Następnie maksymalną liczbę bajtów na pojedynczej stronie danych (8060) dzielimy przez

szacunkową wielkość wiersza. W wyniku otrzymujemy liczbę wierszy mieszczących się na

stronie.

3. Następnie szacunkową liczbę wierszy dzielimy przez otrzymaną liczbę wierszy na stronie. W

ten sposób otrzymujemy liczbę stron niezbędnych do zapisania danych znajdujących się w

tabeli.

4. W kolejnym kroku otrzymaną liczbę stron mnożymy przez 8196 B (rozmiar pojedynczej

strony), co daje nam w wyniku wielkość pliku danych.

Przykładowe rozwiązanie

Wyświetlanie wierszy danych

Zanim będziesz mógł wyświetlić wiersze danych w twojej tabeli w bazie danych będziesz musiał

odpowiednio zgromadzić informacje na temat numeru pliku i numeru strony na której interesujące

Cię dane są zawarte. Wyobraźmy sobie, że stworzyliśmy tabelę Ksiazka o postaci:.

CREATE TABLE [dbo].[Ksiazka] ( [ID_Ksiazka] [int] IDENTITY(1,1) NOT NULL, [Tytul] [varchar](50) NULL, [Autor] [varchar](30) NULL, [Rok] [char](4) NULL

)

Do nowo powstałej tabeli Ksiazka wpisujemy trzy dowolne rekordy.

Podczas tworzenia tabeli Ksiazka do widoku systemowego:

• sysindexes wstawiany jest nowy wiersz, przechowujący informację o nowym obiekcie

(tabela Ksiazka), który przed chwilą został stworzony, co możemy zaobserwować na rys. 7.

Page 9: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 9/19

Rys. 7 Wstawiony wiersz do tabeli sysindexes

• syscolumns wstawiane są wiersze, przechowujące informację na temat poszczególnych

atrybutów, z których złożona jest tabela Ksiazka, co możemy zaobserwować na rys. 8.

Rys. 8 Wstawione wiersze do tabeli syscolumns

W celu poprawnego uruchomienia polecenia DBCC PAGE należy pobrać odpowiednią wartość z

widoku sysindexes (0x9D0000000100) i przekształcić ją na adres pliku strony (kolumna first

na rys. 7). W pierwszym kroku należy zamienić bajty, aby uzyskać ciąg 00 01 00 00 00 9D.

Pierwsze dwie grupy (00 01) reprezentują 2-bajtowy numer pliku, a ostatnie cztery grupy (00 00

00 9D) – numer strony. Zatem plik ma numer 1, a strona ma numer 157.

Na rys. 9 pokazano faktyczną zawartość wierszy tabeli Ksiazki z bazy danych Biblioteka.

Rys. 9 Wiersze danych tabeli Ksiazki

Page 10: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 10/19

Polecenie DBCC PAGE wyświetla wiersze danych w czterech grupach po 4 bajty naraz. W obrębie

każdej z grup bajty wyświetlane są w odwrotnej kolejności.

Szacowanie wielkości pliku danych

W przykładzie tym posłużymy się wcześniej stworzona tabelą Ksiazki oraz stworzymy nową

tabelę Czytelnicy oraz tabelę techniczna Ksiazki_Czytelnicy. Dla tej tabeli określimy

wielkość pliku danych.

1. Określamy rozmiar pojedynczego wiersza w tabeli Ksiazki, Czytelnicy oraz

Ksiazki_Czytelnicy.

Tabela Ksiazki

Kolumna Typ Rozmiar

ID_Ksiazka int 4 bajty

Tytul varchar(200) 200 bajtów

Autor varchar(50) 50 bajtów

Rok char(4) 4 bajty

ID_Czytelnik int 4 bajty

Suma 262 bajtów

Tabela Czytelnicy

Kolumna Typ Rozmiar

ID_Czytelnik int 4 bajty

Nazwisko varchar(50) 50 bajtów

Imie varchar(30) 30 bajtów

Data_urodzenia smalldatatime 4 bajty

ID_Ksiazka int 4 bajty

Suma 92 bajtów

Tabela Ksiazki_Czytelnicy

Kolumna Typ Rozmiar

ID_Ksiazka int 4 bajty

ID_Czytelnik int 4 bajty

Suma 8 bajtów

2. Wyznaczamy liczbę wierszy mieszczących się na stronie. W naszym przypadku mamy:

Ksiazki = 8060 / 262 B = 31 wierszy na stronie

Czytelnicy = 8060 / 92 B = 88 wierszy na stronie

Ksiazki_Czytelnicy = 8060 / 8 B = 1008 wierszy na stronie

Page 11: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 11/19

3. Przy założeniu, że w tabeli Ksiazki będzie znajdowało się 5000 rekordów, w tabeli

Czytelnicy 2000 rekordów a w tabeli Ksiazki_Czytelnicy 22000 rekordów,

wyznaczamy liczbę stron niezbędnych do zapisania danych znajdujących się w tabeli.

Ksiazka = 5000 rekordów / 31 wiersze = 162 strony

Czytelnicy = 2000 rekordów / 88 wierszy = 23 strony

Ksiazki_Czytelnicy = 22000 rekordów / 1008 wierszy = 22 strony

4. Sumujemy liczbę wszystkich stron

162 strony + 23 strony + 22 strony = 207 stron

5. Obliczamy wielkość pliku danych.

8196 B * 207 stron = 1696572 B= 1,7 MB

Porady praktyczne

• Widok systemowy sysindex zawiera dwie ważne kolumny, które reprezentują numery

stron w obrębie bazy danych: id i first. Kolumna id przechowuje numer identyfikacyjny

bazy danych. Kolumna first przechowuje wartość, powyżej której znajdują się fizycznie

wpisane rekordy (numer strony danych) oraz numer pliku danych.

• W sytuacji, kiedy tabela przechowuje dane typu OLE (text, ntext lub image), rzeczywiste

dane mogą nie być przechowywane na stronach razem z resztą danych wiersza. Wynika to z

faktu, iż dane tego typu zajmują dużo przestrzeni dyskowej a zatem ich fragmenty mogą być

przechowywane w różnych plikach oraz na różnych stronach danych.

• Z racji tego, iż obiekty typu OLE zajmują dużo przestrzeni dyskowej pamiętaj, że należy

podczas wyboru tego typu danych kilkakrotnie zastanowić się czy jest to niezbędny typ

danych i czy nie można zastąpić go innym lżejszym typem.

• W celu poprawnego uruchomienia polecenia DBCC PAGE, należy prawidłowo pobrać

odpowiednia wartość z widoku systemowego sysindexes i przekształcić ją na adres pliku i

strony.

• Pamiętaj, że z widoku sysindexes pobieramy zawartość kolumny first w postaci

heksadecymalnej. W pierwszym kroku należy zawsze zamienić bajty. Uzyskana wartość

składa się z dwóch części: numeru pliku (pierwsze dwie grupy) oraz numeru strony (ostatnie

cztery grupy).

• Widoki systemowe sysindexes i syscolumns przechowują wiele różnorodnych informacji

na temat obiektów w ramach bazy danych (data utworzenia, data modyfikacji, itp.)

przydatnych w skutecznych i sprawnych pracach administracyjnych.

• Pamiętaj, w wielu sytuacjach szacowanie wielkości pliku danych i pliku dziennika transakcji

jest rzeczą bardzo ważną z punktu widzenia administracji serwerem bazodanowym. Ma to

szczególne znaczenie w przypadku przenoszenia bazy danych z innego systemu zarządzania

bazą danych, gdzie znana jest liczba rekordów w poszczególnych obiektach bazy danych.

• W przypadku, obliczenia wielkości pliku danych wychodzi wartość niecałkowita (patrz

przykładowe obliczenie wielkości pliku danych), np. 5.48MB, wówczas w celu zapewnienia

odpowiedniej przestrzeni na importowane dane należy ustawić wielkość początkową pliku

danych na 6.0MB. Microsoft SQL Server 2008 nie daje możliwości stworzenia bazy danych z

plikiem danych wielkości niecałkowitej.

• Pamiętaj, w systemowej bazie danych tempdb dostarczonej z serwerem Microsoft SQL

Server 2008, ustawione są parametry wyjściowe Twojej bazy danych. Jeżeli zmienisz

cokolwiek w tej bazie danych wszystkie bazy tworzone w ramach serwera będą pobierały jej

wartości początkowe.

• Pamiętaj nigdy nie kasuj baz danych dostarczonych wraz z Microsoft SQL Server 2008.

Operacja ta może doprowadzić do niestabilnej pracy serwera a w niektórych sytuacjach

wręcz do jego poważnego uszkodzenia.

Page 12: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 12/19

• Pamiętaj w opcji SQL Server 2008 przy tworzeniu bazy danych mamy możliwość ustawienia

wielkości pliku danych oraz wielkości wzrostu pliku danych. Wielkości te są liczbami

całkowitymi z dokładnością do 1 MB. Dobrą praktyką jest ustawienie parametru wzrostu

pliku danych jako 30% wartości pliku danych (jednak nie mniej niż 1MB). Przykładowo dla

pliku danych wielkości 10MB powinniśmy ustawić wielkość wzrostu pliku danych na poziomie

3MB.

Uwagi dla studenta

Jesteś przygotowany do realizacji laboratorium jeśli:

• rozumiesz, co oznacza strona danych, nagłówek strony, wiersze danych, tablica przesunięć

wierszy

• rozumiesz składnię instrukcji DBCC

• umiesz przeliczać system heksadecymalny na system dziesiętny

• znasz podstawowe typy danych w SQL Server 2008

• umiesz obliczać wielkość pliku danych

Pamiętaj o zapoznaniu się z uwagami i poradami zawartymi w tym module. Upewnij się, że

rozumiesz omawiane w nich zagadnienia. Jeśli masz trudności ze zrozumieniem tematu zawartego

w uwagach, przeczytaj ponownie informacje z tego rozdziału i zajrzyj do notatek z wykładów.

Dodatkowe źródła informacji

1. Jeffrey D. Ullman, Jennifer Widom, Podstawowy wykład z systemów baz danych, WNT, 2000

W książce autor w przystępny i zrozumiały sposób przedstawia między innymi jak

zorganizowane jest przechowywanie danych oraz pokazuje, w jaki sposób można

odczytać strony danych.

2. Christopher J. Date, Wprowadzenie do systemów baz danych, WNT, 2000

W książce tej znajdziemy dużo szczegółowych informacji na temat teorii

przechowywania danych w bazach danych. Znajdzie cie w niej również szczegółową

informację na temat polecenia DBCC, wraz z wieloma wariantami jego użycia w celu

przeglądania danych na bardzo niskim poziomie. Pozycja szczególnie polecana dla

osób pragnących poszerzenie swojej wiedzy z tej tematyki.

3. Ramez Elmasri, Shamkant B. Navathe, Wprowadzenie do systemów baz danych, Wydawnictwo

Helion, 2005

Podobnie jak w poprzedniej pozycji, w książce tej znajdziemy bardzo szczegółowe

informacje na temat teorii przechowywania danych w bazach danych. Pozycja

szczególnie polecana dla osób pragnących poszerzyć swoją wiedzę z tej tematyki.

Page 13: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 13/19

Laboratorium podstawowe

Problem 1 (czas realizacji 25 min)

Jesteś administratorem w firmie National Insurance. Programiści modernizujący aplikacje

dostępową do twojej bazy danych poprosili Cię jako eksperta o zaprezentowanie sposobu

przechowywania danych w SQL Server 2008. Ma to im pomóc w zrozumienia sposobu

przechowywania danych i ulepszeniu niskopoziomowego działania aplikacji.

Zadanie Tok postępowania

1. Utwórz

testową bazę i

tabelę

• Uruchom maszynę wirtualną BD2008.

— Jako nazwę użytkownika podaj Administrator.

— Jako hasło podaj P@ssw0rd.

Jeśli nie masz zdefiniowanej maszyny wirtualnej w Microsoft Virtual

PC, dodaj nową maszynę używając wirtualnego dysku twardego z pliku

D:\VirtualPC\Dydaktyka\BD2008.vhd.

• Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom

SQL Server Management Studio.

• W oknie logowania kliknij Connect.

2. Utwórz bazę • Wykonaj poniższy kod tworzący bazę danych Dyplomowe:

-- (1) Ustawiamy sie na baze danych master

USE master

GO

-- (2) sprawdzmy, czy taka baza juz istnieje;

-- jesli tak, to usuwamy ja

IF EXISTS (SELECT *

FROM master..sysdatabases

WHERE name = 'Dyplomowe')

DROP DATABASE Dyplomowe

GO

-- (3) Tworzymy baze danych Dyplomowe

CREATE DATABASE Dyplomowe

ON

( NAME = 'Dyplomowe', FILENAME = N'C:\Program Files\Microsoft SQL

Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Dyplomowe.mdf' , SIZE =

3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )

LOG ON

( NAME = 'Dyplomowe_log', FILENAME = N'C:\Program Files\Microsoft

SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Dyplomowe.ldf' , SIZE =

1536KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

GO

• Stwórz dwie tabele: Osoba i Praca. W tym celu wykonaj poniższy kod:

-- (3) Tworzenie przykladowych dwoch tabel: Osoba i Praca

CREATE TABLE Osoba(

ID_Osoby smallint NOT NULL,

Imie varchar(20) NOT NULL,

Nazwisko varchar(50) NOT NULL, Nr_Indeksu varchar(6) NOT NULL

Page 14: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 14/19

CONSTRAINT [PK_Osoba] PRIMARY KEY CLUSTERED

(

[ID_Osoby] ASC )

)

CREATE TABLE Praca(

ID_Pracy smallint NOT NULL,

Temay varchar(200) NOT NULL,

Data smalldatetime NOT NULL, Ocena smallint NOT NULL

CONSTRAINT [PK_Praca] PRIMARY KEY CLUSTERED

(

[ID_Pracy] ASC

) )

• Uzupełnij tabele Osoba i Praca przykładowymi danymi.

3. Sprawdź

zawartość

widoków

systemowych

• Z menu głównego wybierz File -> Open -> File.

• Odszukaj plik C:\widoki_systemowe.sql i kliknij Open.

• Na utworzonej bazie danych Dyplomowe wykonaj poniższe zapytanie:

-- (1) Ustaw się n abaze danych Dyplomowe

USE Dyplomowe

GO

-- (2) Informacja o wpisie w widoku sysobjects

SELECT name, object_id, type,

type_desc, create_date, modify_date FROM [Dyplomowe].[sys].[objects]

WHERE name='Osoba' OR name='Praca'

GO

• W wyniku powinieneś otrzymać informację na temat wpisu w widoku

systemowym sysobjects.

Rys. 10 Wpis w widoku systemowym sysobjects

W wyniku wykonania zapytania na tabeli systemowej sysobject

otrzymasz między innymi informację o numerze identyfikacyjnym

obiektu tabeli object_id. Numer ten będzie Ci pomocny w wyszukaniu

odpowiedniego wpisu w widoku systemowym syscolumns.

• Wykonaj zapytanie:

-- (3) informacja na temat wpisu w widoku systemowym syscolumns

SELECT object_id, name, column_id,

system_type_id, max_length, collation_name

FROM [Dyplomowe].[sys].[columns]

where object_id='85575343' OR object_id='117575457' GO

• W wyniku powinieneś otrzymać informację na temat wpisu w widoku

systemowym syscolumns.

Page 15: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 15/19

Rys. 11 Wpis w widoku systemowym syscolumns

• Wykonaj zapytanie:

-- (4) Informacja na temat wpisu w widoku systemowym sysindexes

SELECT id, first, root, minlen, name, rows

FROM [Dyplomowe].[sys].[sysindexes]

WHERE name='PK_Osoba' OR name='PK_Praca' GO

• W wyniku powinieneś otrzymać informację na temat wpisu w widoku

systemowym sysindexes.

Rys. 12 Wpis w widoku systemowym sysindexes

Informacja z kolumny first w widoku systemowym zawiera informacje

na temat numeru pliku oraz numeru strony, na której przechowywane

są dane z tabeli.

4. Zbadaj strony

danych

• Dla tabeli Osoba odczytaj wartość kolumny first z widoku sysindexes

(0x9B0000000100) i przekształć ją na adres pliku strony.

• Zamień bajty, aby uzyskać ciąg 00 01 00 00 00 9B.

• Pierwsze dwie grupy (00 01) reprezentują 2-bajtowy numer pliku, a

ostatnie cztery grupy (00 00 00 9B) numer strony. Zatem plik ma numer

1, a strona ma numer 155.

• Z menu głównego wybierz File -> Open -> File.

• Odszukaj plik C:\strona_danych.sql i kliknij Open.

• Wywołaj instrukcję BDCC PAGE z ustalonymi wcześniej parametrami:

DBCC TRACEON(3604) GO

DBCC PAGE (Dyplomowe,1,155,1)

Instrukcja DBCC TRACEON(3604) nakazuje żeby SQL Server wyświetlił

strony danych na ekranie monitora w sposób przyjazny dla

użytkownika.

• W wyniku powinieneś otrzymać informacje jak na rys. 13.

Page 16: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 16/19

Rys. 13 Wyświetlona strona danych

Page 17: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 17/19

Problem 2 (czas realizacji 20 min)

Jesteś administratorem w firmie National Insurance. Wiesz, że do twojej bazy danych maja zostać

zaimportowane nowe dane. W tym celu musisz przeprojektować swoja bazę danych i obliczyć

wielkość początkową pliku danych i pliku dziennika transakcji.

Zadanie Tok postępowania

1. Utwórz

testową bazę

• Uruchom maszynę wirtualną BD2008.

— Jako nazwę użytkownika podaj Administrator.

— Jako hasło podaj P@ssw0rd.

Jeśli nie masz zdefiniowanej maszyny wirtualnej w Mirosoft Virtual PC,

dodaj nową maszynę używając wirtualnego dysku twardego z pliku

D:\VirtualPC\Dydaktyka\BD2008.vhd.

• Kliknij Start. Z grupy programów Microsoft SQL Server 2008 uruchom

SQL Server Management Studio.

• W oknie logowania kliknij Connect.

• Rozwiń węzeł Database i wybierz PraceDyplomowe

• W obrębie bazy danych PraceDyplomowe rozwiń węzeł Database

Diagram.

• Powinieneś zobaczyć diagram taki jak na Rys. 14.

Rys. 14 Diagram bazy danych PraceDyplomowe

W celu wykonania tego zadania należy wykonać moduł 2 i moduł 3

związany z projektowaniem i implementacją bazy danych. Dla

zaprojektowanej bazy danych będziemy szacowali wielkość pliku

danych.

2. Oszacuj

wielkość pliku

danych

• Na podstawie tabeli określ rozmiar pojedynczego wiersza:

Recenzja = ID_Osoby(2B) + ID_Pracy(2B) + ID_Ocena(2B) = 6B

Osoba = ID_Osoby(2B) + Imie(20B) + Nazwisko(50B) +

Nr_Indeksu(int)(4B) + ID_Stopien(2B) = 78B StopienNaukowy = ID_Stopien(2B) + Stopien(25B) = 27B

Autorzy = ID_Osoby(2B) + ID_Pracy(2B) = 4B

Slownik = ID_SlowoKlucz(2B) + ID_Pracy(2B) = 4B

SlowoKlucz = ID_SlowoKlucz(2B) + SlowoKlucz(25B) = 27B

Page 18: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 18/19

TypStudiow = ID_TypStudiow(2B) + NazwaTypu(15B) = 17B

Ocena = ID_Ocena(2B) + Ocena(4B) = 6B

PracaDyplomowa = ID_Pracy(2B) + Temat (char500)(500B) + Data(8B) + ID_Ocena(2B) + ID_TypStudiow(2B) + ID_Promotor(2B) = 516B

• Wyznacz liczbę stron niezbędnych do zapisania danych znajdujących się

w tabelach:

Recenzja = 8540 rekordów / 1343 wierszy = 7 stron

Osoba = 5000 rekordów / 103 wierszy = 49 stron

StopienNaukowy = 4 rekordy / 298 wierszy = 1 strona Autorzy = 4270 rekordów / 2015 wierszy = 3 strony

Slownik = 12810 rekordów / 2015 wierszy = 7 stron

SlowoKlucz = 500 rekordów / 298 wierszy = 2 strony

TypStudiow = 3 rekordy / 474 wierszy = 1 strona

Ocena = 4 rekordy / 1343 wierszy = 1 strona PracaDyplomowa = 5000 rekordów / 15 wierszy = 334

• Zsumuj liczbę stron:

Liczba stron = 405 stron

• Otrzymaną liczbę stron pomnóż przez 8196B (rozmiar pojedynczej

strony), co powinno dać w wyniku wielkość pliku danych:

Wielkość pliku danych = Liczba stron * 8196B = 405 * 8196B = = 3 319 380 B = 3,32 MB

Page 19: Wewnętrzna struktura bazy danychmath.uni.lodz.pl/~bleja/asb/ITA-101-Modul_04_v2.pdf · przechowywane są dane, jak zbudowana jest strona danych, oraz w jaki ... atrybutów, z których

Włodzimierz Dąbrowski, Przemysław Kowalczuk, Konrad Markowski Moduł 4

ITA-101 Bazy danych Wewnętrzna struktura

Strona 19/19

Laboratorium rozszerzone

Zadanie 1 (czas realizacji 90 min)

Jesteś głównym administratorem sytemu bazodanowego w firmie BARKA, która zajmuje się

inwestycjami na giełdzie papierów wartościowych. Kierownictwo firmy w wyniku przejęcia

mniejszej firmy TFI START zarządzającej funduszami inwestycyjnymi podjęło decyzje o modernizacji

aplikacji dostępowej do bazy danych oraz rozbudowie istniejącej bazy danych. W związku z tym

pomiędzy Tobą a programistami aplikacji dostępowej powinna istnieć ścisła współpraca. W celu

ulepszeniu niskopoziomowego działania aplikacji poproszono Cię, jako eksperta, o zaprezentowanie

sposobu przechowywania danych w SQL Server 2008. Z drugiej strony wiesz, że po rozbudowie do

twojej bazy danych maja zostać zaimportowane nowe dane za okres ostatnich 5 lat. W tym celu

musisz przeprojektować swoja bazę danych i obliczyć wielkość początkową pliku danych i pliku

dziennika transakcji.

Zadania, jakie przed tobą zostały postawione, są następujące:

1. Pokaż programistom, w jaki sposób zorganizowane jest przechowywanie danych w

SQL Server 2008.

2. Przeprojektuj istniejącą bazę danych.

3. Oblicz, jaka powinna być wielkość pliku danych dla przeprojektowanej bazy danych.