13. Wydajność i integralność bazy danych.txt

(54 KB) Pobierz
#291
Rozdziaウ 13.
Wydajno懈 i integralno懈 bazy danych

Projekt dobrej aplikacji bazy danych jest nierozerwalnie zwiケzany z zagadnieniami wydajno彡i i integralno彡i. W chwili przekazania aplikacji do uソytku, stopie・jej wydajno彡i nabiera duソego znaczenia. Jeソeli aplikacja dziaウa w spos maウo efektywny, szans・na to, ソe zostanie zaakceptowana przez uソytkownik sケ niewielkie. Podobnie rzecz ma si・w przypadku integralno彡i danych. Jeソeli nie mamy pewno彡i co do poprawno彡i danych, na ktych pracujemy, nie moソemy polega・na bazie danych pod ソadnym istotnym wzgl鹽em.
Niestety, te dwie istotne cechy kaソdej aplikacji bazy danych sケ, pod pewnymi wzgl鹽ami, sobie przeciwstawne. Wiele krok podejmowanych w celu zapewnienia integralno彡i bazy danych powoduje obniソenie jej wydajno彡i. Dla wi麑szo彡i aplikacji koszt ten jest nieistotny, poniewaソ dodatkowe obciケソenie naウoソone na baz・danych nie jest na tyle duソe, aby mogウo wpウynケ・na jej ognケ wydajno懈. Mimo to, warto jednak zna・techniki umoソliwiajケce zwi麑szanie wydajno彡i bazy danych oraz ponoszone przy tym koszty. Dzi麑i tej wiedzy programista moソe podejmowa・忤iadome decyzje co do projektu przyszウej bazy danych, zapewniajケc jej odpowiedniケ wydajno懈 bez utraty integralno彡i.

Zwi麑szanie wydajno彡i bazy danych

Pierwszケ rzeczケ dotyczケcケ wydajno彡i bazy danych, o ktej trzeba wiedzie・ jest to, ソe moソe ona by・mierzona na wiele rnych sposob. Niekte metody optymalizacji zwi麑szajケ ognケ wydajno懈 bazy danych, podczas gdy inne poprawiajケ tylko niekte jej aspekty, ale jednocze從ie obniソajケ inne. Wydajno懈 bazy danych moソe by・mierzona w oparciu o nast麪ujケce parametry:
*   Czas odpowiedzi.
*   Liczba obsウugiwanych jednocze從ie uソytkownik.
*   Liczba transakcji na dzie・
#292
Aplikacje majケ minimalne wymagania w odniesieniu do kaソdego z tych parametr, ale w niektych przypadkach moソna postara・si・o lepsze wyniki na tle jednego z nich kosztem pozostaウych.

Projekt bazy danych a jej wydajno懈

Zanim zaczniesz zastanawia・si・nad tym, jak konstruowa・zapytania, aby wykonywaウy si・one w najbardziej wydajny spos, powiniene・upewni・si・ czy projekt bazy danych zapewnia optymalne warunki jej dziaウania. Jak mili徇y w rozdziale 2., istnieje kilka filozofii projektowania baz danych. Konstruujケc baz・danych, naleソy kierowa・si・schematem, w oparciu o kty powstaje aplikacja (DES[DES (ang. decision support) - systemy wspomagania decyzji (przyp. tウum).] lub OLTP[OLTP (ang. online transaction proccessing) - przetwarzanie transakcji w trybie rzeczywistym (przyp. tウum.).]). Wi鹹ej informacji na temat obu schemat aplikacji znajdziesz w rozdziale drugim (podrozdziaウ Ц praktyce").
Podstawowa zasada zwi麑szania wydajno彡i: im mniejszy typ danych uソyty do realizacji zadania, tym lepiej. Wytウumaczenie tej zasady jest bardzo proste: im mniej miejsca zajmujケ dane, tym mniej czasu trzeba na odnalezienie ich w pami鹹i lub odczytanie z dysku. Trzeba pami黎a・o tym, ソe z rnymi typami danych oraz ustawieniami kolumn zwiケzana jest pewna nadmiarowa porcja danych. Na przykウad pola znakowe o zmiennej dウugo彡i wymagajケ kilku dodatkowych bajt do zapisania rozmiaru danych przechowywanych w kaソdym polu. Niemniej jednak, gdy dウugo彡i danych przechowywanych w polach tego typu sケ zrnicowane w znacznym stopniu, zysk w pornaniu z uソyciem p o staウej dウugo彡i rekompensuje koszt informacji nadmiarowej.
Pewne oszcz鹽no彡i wiケソケ si・rnieソ z uソyciem p typu NOT NULL zamiast NULL. Pola mogケce przechowywa・warto彡i NULL zuソywajケ kilka bajt pami鹹i do zapisania informacji o tym, czy warto懈 w polu jest pusta, czy teソ nie.
Niekte bazy danych posiadaj ケ typ danych BIT, wymagajケcy jednego bitu pami鹹i, do przechowywania warto彡i typu logicznego (Boolean). Uソycie tego typu niesie ze sobケ dwie korzy彡i. Pierwsza to minimalna ilo懈 zajmowanej pami鹹i. Druga korzy懈, to eliminacja konieczno彡i pami黎ania o tym, jakie warto彡i reprezentujケ prawd・i faウsz w polu danych. Na przykウad, jeソeli do zapisywania warto彡i typu logicznego uソyjemy pola CHAR (1), naウoソymy na siebie przykry obowiケzek pami黎ania, jaka warto懈 w tym polu reprezentuje prawd・(np. T, Y lub 1), a jaka faウsz (np. F, N lub 0).

Narz鹽zia pomiaru wydajno彡i

Za kaソdym razem, kiedy uruchamiamy zapytanie, jest dla niego przygotowywany plan wykonania (ang. execution plan). Polecenia zawarte w tym planie sケ nast麪nie kolejno wykonywane przez baz・danych.
#293
W pewnym sensie, zapytania moソna przyrna・do problem matematycznych. Proste problemy matematyczne wymagajケ wykonania pojedynczej operacji, np. dodajケc dwa do dwh, wykonujemy jednケ dodatkowケ operacj・ w wyniku ktej otrzymujemy wynik cztery. Jeソeli mnoソymy przez siebie dwie wielocyfrowe liczby w spos r鹹zny, najpierw wykonujemy pojedyncze mnoソenie dla kaソdej z cyfr jednej liczby, a nast麪nie dodajemy do siebie otrzymane wyniki. Liczba operacji ro從ie wraz ze stopniem skomplikowania wyraソe・ Podobnie wyglケda plan wykonania - jest to lista wszystkich pojedynczych operacji wykonywanych w celu otrzymania rezultat wi麑szego zapytania.
W matematyce oraz w zapytaniach baz danych istnieje na og wiele metod pozwalajケcych na rozwiケzanie zウoソonego problemu. Czウowiek rozwiケzujケcy zadanie wybiera metod・najウatwiejszケ z jego punktu widzenia. W bazie danych za dobranie najbardziej efektywnego planu wykonania zapytania odpowiedzialny jest optymali-zator zapyta・(ang. ケuery optimizer). Uソywajケc narz鹽zi do pomiaru wydajno彡i bazy danych moソna obserwowa・operacje naleソケce do 彡ieソki wykonania wybranej przez optymalizator dla zapytania.                    ...... -<封
Wi麑szo懈 baz danych posiada narz鹽zia pozwalajケce na wglケd w plan wykonania zapyta・oraz okre徑enie, czy zastosowanie podpowiedzi dla optymalizatora przynosi popraw・wydajno彡i zapyta・ Moソna rnieソ napisa・kilka rnych zapyta・i sprawdzi・ kte z nich cechuje si・najlepszケ wydajno彡iケ.
Bazy danych wykorzystujケce Transact-SQL (Microsoft SQL Server oraz wszystkie produkty Sybase) posiadajケ ustawienie SHOWPLAN udost麪niajケce uソytkownikom analizy wykonania ich zapyta・ W Oracle'u do tego samego celu sウuソy ustawienie auto-trace. Narz鹽zia te rozbijajケ zapytania na indywidualne operacje, kte skウadajケ si・na ich wykonanie. Obu tym narz鹽ziom przyjrzymy si・za chwil・z osobna.

AUTOTRACE (Oracle)

Istniejケ dwie metody pozwalajケce na obejrzenie planu wykonania okre徑onego zapytania. Jeソeli chcemy zobaczy・plan wykonania zapytania przed jego faktycznym uruchomieniem, moソemy do tego celu uソy・polecenia EXPLAIN PLAN. Je徑i interesuje nas wyウケczenie planu wykonania zapyta・po ich uruchomieniu, moソemy uソy・polecenia SET AUTOTRACE ON. Wyウケczenie podglケdu planu wykonania nast麪uje po ustawieniu AUTORACE na warto懈 0FF (SET AUTOTRACE 0FF).
==================
Rada
Ustawienie AUTOTRACE w zupeウno彡i wystarcza do przeglケdania plan wykonania wyraソe・typu SELECT. Jeソeli jednak uソywasz wyraソe・manipulujケcych danymi, do ich przeglケdania lepiej skorzysta・z polecenia EKPLAIN PLAN, kte wy忤ietla plany wykona・zapyta・bez faktycznej modyfikacji danych w tablicach.
==================

Wybiegnijmy na chwil・w prz ソeby pokaza・ jak dziaウa polecenie EXPLAIN PLAN. Aby uソy・polecenia EXPLAIN PLAN, naleソy wpisa・EKPLAIN PLAN FOR, a nast麪nie zapytanie. Plan wykonania przykウadowego zapytania pokazuje listing 13.1.
#294
--------------------------------
Listing 13.1. Plan wykonania prostego zapytania

EXPLAIN PLAN FOR
SELECT *
FROM Movies

Explained.
--------------------------------

Aby polecenie EXPLAIN PLAN mogウo dziaウa・ musi istnie・specjalna tablica, przechowujケca plany zapyta・ Tablic・takケ (pod nazwケ PLAN_TABLE) tworzy specjalny skrypt, o nazwie utlxplan.sql, dostarczany razem z systemem Oracle. Jeソeli utworzymy wウasnケ tablic・dla plan (o strukturze identycznej ze strukturケ tablicy PLAN_TABLE), jej nazw・musimy poda・w wyraソeniu EXPLAIN PLAN. Do identyfikacji odr鹵nych plan w tablicy sウuソy pole STATMENT_ID, ktemu trzeba nada・odpowiedniケ warto懈 1 w wyraソeniu EXPLAIN PLAN, tak jak wida・to na przykウadzie z listingu 13.2.
--------------------------------
Listing 13.2. Zapisywanie planu zapytania

EKPLAIN PLAN
SET STATEMENT_ID = 'foo'
FOR
SELECT movie_title
FROM Movies

Explained.
--------------------------------

Do wydobycia danych z tablicy plan, po wykonaniu polecenia EKPLAIN PLAN, wystarczy uソy・zwykウej instrukcji SELECT, jak ta w listingu 13.3. W tym przypadku wynikiem zapytania sケ dwie kolumny, ale oprz nich istnieje jeszcze wiele innych danych zapisanych w tablicy plan.
--------------------------------
Listing 13.3. Wydobywanie wynik polecenia EKPLAIN PLAN z tablicy plan:

SELECT operation, object_name
FROM PlanJTable
WHERE statment id = 'foo'

OPERATION		OBJECT_NAME
--------------------------------
SELECT STATMENT
TABLE ACCESS	MOVIES
--------------------------------

AUTOTRACE jest troch・ウatwiejszy w uソyciu niソ EXPLAIN  PLAN. Wyniki zapytania generowane przy wウケczonej opcji AUTOTRACE przedstawia listing 13.4.
--------------------------------
Listing 13.4. Plan wykonania tworzony przy wウケczonej opcji AUTOTRACE

SET AUTOTRACE ON;

SELECT stuio_name
FROM Studios;

STUIO NAME
-----------
Giant
MPM
FKG
#295
Delighted Artists
Metaversal Studios Some
Studio

6 rows selected.

Execution Plan
--------------------------------
0	SELECT STATEMENT Optimizer=CHOOSE
1	0   TABLE ACCESS (FULL) 0F 'STUDIOS'

Statistics
----------------
219	recursive calls
4     db bウock gets
44	consistent gets
3	physical reads
0     redo size
662	bytes sent via SQL*Net to client
659	bytes receiyed via SQL*Net from client
4  	SQL*Net roundtrips to/from client
4     sorts (memory)

6   	rows processed
--------------------------------

Jak wida・ ilo懈 danych dost麪nych po wウケczeniu opcji AUTOTRACE jest spora. Wygenerowane tabele zawierajケ informacje dotyczケce uソycia bazy danych i zasob systemowych przez zapytanie. Nas interesuje bardziej cze懈 dotyczケca planu wykonania (tabela...
Zgłoś jeśli naruszono regulamin