Výkonnost databázových aplikací 1

1. 2. 1998

Sdílet

"Navrhnout databázi a doufat, že navždy zůstane neměnnou, konstantní, je velmi naivní pohled. Ani sebelepší fyzic...





„Navrhnout databázi a doufat, že navždy zůstane neměnnou,

konstantní, je velmi naivní pohled. Ani sebelepší fyzický návrh

nemůže pro stále se měnící databázi poskytnout konstantně dobrou

výkonnost, a to i přes samo-reorganizační vlastnosti některých

SŘBD.“

Shaku Atre, Data Base: Structured Techniques for Design,

Performance and Management, 1980



Dnes je všeobecně znám fakt, že nebyla přesná představa 70. let

(ve kterých kapacity počítačů ve většině oblastí přesahovaly

poptávku), kdy by vývoj v oblasti hardwaru postupně zcela vyřešil

rostoucí požadavky na počítačové systémy a o výkonnost nebude

třeba se více starat. Pokroky v oblasti hardwaru sice umožňují

realizovat nová sofistikovanější softwarová řešení, značnou

pozornost je však třeba věnovat odpovídající konfiguraci celého

systému a zejména pak jeho výkonnosti.

Problematice výkonnosti je věnován i tento seriál článků,

v němž bych rád poukázal na některé podstatné problémy, jež

souvisejí s tímto pojmem. Celý seriál je rozčleněn do tří částí:



1. první část se bude obecně zabývat pojmem výkonnost, poukazuje na přístupy zohledňování výkonnostních požadavků v dnešních softwarových aplikacích a stručně se dotýká i měření výkonnosti;



2. druhá část je zaměřena již na konkrétní typ softwaru, a sice na databázové aplikace typu klient/server, které představují dnes nejobvyklejší architekturu řešení aplikačního softwaru;



3. třetí část je věnována databázovým serverům, klíčové komponentě databázových aplikací a některým jejich možnostem řízení výkonnosti.



Na úvod se vraťme obecně k pojmu výkonnost . Tato

problematika je podstatným, často však zanedbávaným aspektem

vývoje softwaru. U klasických informačních systémů jsou úvahy

o výkonnosti často spojovány s pojmy jako doba odezvy

uživatelských transakcí, u systémů pracujících v reálném čase

(tzv. reaktivních systémů) pak spíše s přesností a spolehlivostí

systému. Tvůrci každého systému usilují (ať to již deklarují či

nikoliv) o dosažení tzv. výkonnostní rovnováhy . Systém je

z hlediska výkonnosti vybalancovaný, jestliže požadavky na zdroje

odpovídají kapacitě počítače a zároveň pokud systém splňuje

výkonnostní požadavky.

Již z výše uvedeného bude pochopitelné, že se

v souvislosti s výkonností rozvíjí další oblast informatiky,

která se nazývá výkonnostní inženýrství (Performance

Engineering). Jejím úkolem je definovat nástroje, které umožní

vývojářům dosáhnout výkonnostních požadavků uživatelů, a to

nikoliv na úkor požadavků jiných. Výkonnostní inženýrství

zahrnuje dvě základní disciplíny:



a) metody vývoje softwarového systému, zohledňující výkonnostní

požadavky



b) řízení výkonnosti implementovaného systému





ad a) Dnes je již neoddiskutovatelným faktem, že výkonnost je

záležitostí celého životního cyklu projektu. V současné době lze

rozlišit dvě hlavní skupiny přístupů k vývoji softwaru z hlediska

výkonnosti:



- Tradiční metody vývoje softwaru, které se soustředí zejména na

přesnost a spolehlivost, otázku výkonnosti odkládají až na

pozdější fáze životního cyklu (tj. zavádění a testování).

Jestliže se v těchto fázích objeví problémy s výkonností, řeší se

nákupem dodatečného hardwaru nebo „tuningem“ softwaru. Tento

přístup byl akceptovatelný v 70. letech, ale v 80. letech se již

významně zvýšila poptávka po počítačových zdrojích. Zvýšila se

komplexnost systémů, zatímco se proporcionálně snížil počet

vývojářů se schopností řídit výkonnost. To mělo nepříjemné

následky, z nichž mnohé nemohly být řešeny dodatečným hardwarem

(platformy s požadovaným výkonem ještě neexistovaly), ani

tuningem (opravy vyžadovaly podstatné zásahy do návrhu a tím

reimplementaci). Jejich řešení v pozdějších fázích životního

cyklu mělo za následek zvýšení nákladů na vývoj, zpoždění

realizace, nebo nepříznivě ovlivnilo jiné požadavky na systém,

jako srozumitelnost, udržovatelnost, univerzálnost.



- Metody podporující techniky, které lze využít pro ohodnocení

a srovnávání výkonnostních charakteristik návrhu. Mezi tyto

techniky patří:



 – modely sítí front

 – Petriho sítě

 – kvantitativní modely

 – CASE nástroje; některé z těchto nástrojů (CardTools) mají

funkce pro analýzu výkonnosti či nabízejí interface k simulátorům

výkonnosti (Teamwork → ADAS)

 – formální metody založené na matematických postupech

a notacích (neumožňují navrhnout, jak splnit určité požadavky)



Přístupy v této oblasti lze rozlišit na:



- přístupy orientované na operační systém

- přístupy zaměřené na alokaci zdrojů

- softwarově orientované přístupy



a vyznačují se snahou určitým způsobem řidit výkonnost již během

vývoje systému. Příkladem softwarově orientovaného přístupu je

Software Performance Engineering (SPE).



ad b)



Řízení výkonnosti lze rozdělit do tří disciplin:



- odhady výkonnosti,

- měření výkonnosti (monitoring)

- zlepšování výkonnosti (tuning).



Cílem řízení výkonnosti je poskytnout uživatelům nejrychlejší

možný přístup k datům, která potřebují, při využití dostupných

zdrojů co nejúčinněji a nejefektivněji. Tyto zdroje zahrnují

prostor pro zpracování, čas zpracování a lidský čas. Prostor pro

zpracování představuje vnitřní paměť a diskový prostor, čas

zpracování zahrnuje dobu zpracování na CPU a dobu pro realizaci

I/O operací, lidský čas odpovídá reálné době odezvy pro koncového

uživatele.

Většina aplikačního softwaru (a obraťme se již zde přímo

na databázové aplikace) – bez ohledu na to, jak dobře je navržen

- je náchylná k špatné výkonnosti na té či oné úrovni. Příčinou

je entropie. Entropie se popisuje jako tendence k chaosu. Tato

tendence se dříve či později projeví v každé databázi, která není

soustavně ošetřována z hlediska výkonnosti. Příkladem může být

vkládání lineárních klíčových hodnot do nevybalancované stromové

struktury: Jedna větev stromu neustále roste, zatímco ostatní

nerostou, nebo se dokonce zkracují; výsledkem je kosá stromová

struktura a velmi špatná výkonnost. Dalším příkladem jsou

hashované či klusterované indexy, které přerostou do dlouhých

overflow řetězců, jež zvyšují soupeření při zamykání databázových

stránek; nebo změny v uložených informacích, velké objemy nových

informací, nové přístupové cesty k uloženým datům nebo změny

v typickém chování koncových uživatelů.

Samozřejmě že výkonnost významně ovlivňuje vedle entropie

několik dalších faktorů. Patří mezi ně např. to, jak a kde je

SŘBD (Systém Řízení Báze Dat) instalovaná, jak je databázový

server konfigurován, jak a kde se provádějí logovací a zamykací

funkce, a – ze všeho nejdůležitější – návrh databáze a databázové

aplikace.

V tomto dílu bych se nejprve krátce zastavil u problematiky tuningu , ke které se později vrátíme. Tento pojem obecně znamená „ladění“ a nejčastěji je využíván ve smyslu optimalizace výkonnostních charakteristik již implementovaného

systému. V tomto smyslu jej dále chápu i já. Proces tuningu je

možné definovat jako iterativní proces identifikace slabého místa

a změny příslušných výkonnostních charakteristik změnou způsobu

provádění dané aktivity. Takto lze tuning chápat i jako jakési

„nouzové“ řešení, snižující univerzálnost, transparentnost

a udržovatelnost systému. Při realizaci tuningu se totiž

zpravidla objeví řešení, které by bylo efektnější, ale jehož

realizace se již nevyplatí.

Tuning je iterativní proces vylepšování výkonnostních

charakteristik implementovaného systému na základě následujícího

postupu:



1. identifikace slabého místa

2. pokus o vylepšení výkonnostních charakteristik tak, že se

mění to, jak daná komponenta realizuje přidělenou operaci



Tuning je možné provádět v zásadě ve třech oblastech:



- hardware

- základní software

- aplikační software.



Pro případ databázových aplikací je možné tyto tři základní

oblasti ještě modifikovat na:



- hardware a operační systém,

- SŘBD

- aplikační software.



Ve světě panuje značná nejednotnost ohledně přesného

postupu tuningu, tj. zda se má nejprve optimalizovat aplikační

nebo základní software. Dodavatelé databází doporučují nejprve

ladit aplikaci a databázi, pak teprve operační systém. Systémoví

programátoři se zas naopak kloní nejprve k ladění operačního

systému. Tento spor je způsoben mimo jiné i tím, že dnes je

k dispozici řada nástrojů pro optimalizaci jednotlivých komponent

systému, tj. SŘBD, operačního systému i vlastní aplikace, bohužel

však tyto nástroje pracují do značné míry autonomně a není

k dispozici nástroj, který by realizoval optimalizaci komplexně.

Podle mého názoru je třeba před tím, než se začne optimalizovat

SŘBD a aplikace, mít dobře nakonfigurován hardware

a optimalizován operační systém. Těmto dvěma komponentám

výpočetního systému se však v našem seriálu věnovat nebudeme

a zaměříme se na SŘBD a aplikační software.



V případě SŘBD lze ladění provádět



 – na úrovni hardwaru: přidání disků, užití RAID systémů

(v případě problémů s diskovými I/O operacemi), přidáním paměti

(v případě problémů s buffery), výměna CPU (v případě problémů

s využitím CPU)

 – na úrovni parametrů databázového systému: velikost

bufferů, interval checkpointů

 – na úrovni návrhu (nejvyšší úroveň): definice databázového

schématu (normalizace jen do určité úrovně, či denormalizace)

a transakcí (optimalizace dotazu, užití uložených procedur,

zkrácení aktualizačních transakcí), definice indexů (je-li slabým

místem dotaz, je možná třeba přidat index, je-li slabým místem

aktualizace, je možná třeba index ubrat, volba typu indexu

 – B-tree, hashovaný, klusterovaný)



Všechny tři úrovně spolu spolupracují. Je třeba je zvažovat

najednou. Např. tuning na nejvyšší úrovni může způsobit problémy

v oblasti HW.



V oblasti aplikačního softwaru je nutno se zaměřit zejména

na:

 – efektivnost algoritmu zapsaného ve zdrojovém kódu;

v dalších částech seriálu efektivnost předpokládám a nebudu se jí

z důvodu rozsahu dále věnovat, je však třeba vědět, že se jedná

o nezanedbatelnou součást

 – formulaci dotazů, což do značné míry souvisí

i s optimalizéry databázových serverů

 – metodám přístupu k datovým zdrojům