Výkonnost databázových aplikací (2)

1. 3. 1998

Sdílet

V dnešní části seriálu se budu věnovat výkonnosti databázových strojů. Zmíním se o: - způsobu porovnání ...





V dnešní části seriálu se budu věnovat výkonnosti databázových

strojů. Zmíním se o:



- způsobu porovnání výkonnosti databázových serverů; tak jak se

tyto nástroje stávají více a více standardizovanými, je totiž

jejich výkonnost jedním z hlavních rozlišovacích faktorů



- některých fyzických charakteristikách databázových strojů,

které ovlivňují výkonnost databázové aplikace i přístup k jejímu

návrhu



Porovnávání výkonnosti



V případě databázových serverů se podobně jako v případě jiných

technologických nástrojů používají pro vzájemné srovnání tzv.

benchmark testy. Výkonnostní benchmark testy představují sadu

úkolů, které jsou používány pro kvantifikování výkonnosti

systému. Sada úkolů je nezbytná proto, že jeden ze systémů může

být nejefektivnější vzhledem k jednomu úkolu a jiný vzhledem

k jinému.



Sérii benchmark standardů pro databázové systémy definovala

americká organizace Transaction Processing Performance Council

(TPC) a tyto standardy jsou zaměřeny na obě největší třídy

dnešních databázových aplikací: online transaction processing

(OLTP) a decision support (včetně online analytical processing –

OLAP). Obě tyto třídy úloh mají odlišné požadavky. Vysoký stupeň

sdíleného přístupu a chytré techniky pro urychlení procesu

komitování jsou na jedné straně požadovány u systémů s vysokým

stupněm aktualizačních transakcí (OLTP). Na straně druhé systémy

pro podporu rozhodování vyžadují dobré algoritmy vyhodnocení a

optimalizace dotazu. Architektura určitých databázových systémů

byla laděna pro transakční zpracování, jiných zas spíše pro

podporu rozhodování. Někteří dodavatelé se snaží balancovat mezi

oběma typy úloh.



Aplikace typicky zahrnují požadavky obou typů úloh – jak

transakčního zpracování, tak i podpory rozhodování. O tom, který

databázový stroj je lepší pro tu kterou aplikaci, tedy rozhoduje

vzájemný poměr obou typů požadavků.



Některé fyzické charakteristiky databázových strojů ve vztahu k výkonnosti



Databázové soubory



Kromě otevřeného vlastního databázového souboru může relační

databázový stroj (SŘBD) potřebovat pro svoji práci otevřít

zejména následující typy souborů:



- log soubory (transaction log files)



- dočasné soubory



- soubor chyb







Log soubory (transaction log files)



Log soubor obsahuje části databáze před a po změně a dále pak

tzv. log záznamy pro řízení transakcí. Jde o zaznamenání, kdy

transakce začala a jak skončila. Log soubory mají trojí význam:



1. rollback – soubory obsahují data nezbytná pro rollback

transakce



2. Crash recovery – soubory obsahují data nezbytná pro

zpětné uvedení databáze do konzistentního stavu po zhroucení

databáze z důvodu výpadku elektrického proudu nebo chyby

operátora (např. neregulérní „shození“ serveru)



3. Media recovery – log soubory, pakliže jsou zálohovány

spolu s databázovými, obsahují data nezbytná pro obnovení

databáze v případě poškození paměťového média



Log soubory pomáhají zabezpečit konzistenci dat. Pokud se

transakce řádně neukončí, nebo v případě chyby systému či média,

užívá SŘBD log soubory k obnově databáze do jejího původního

stavu.



SŘBD vytváří log soubor v okamžiku prvního připojení se

k databázi. Tak jak dochází ke změnám, přibývají log záznamy

dokumentující tyto změny. V okamžiku, kdy aktuální log soubor

dosáhne určené maximální velikosti, SŘBD vytváří log soubor

nový. Interně log soubory obsahují časové značky a další hodnoty

sloužící pro to, aby je SŘBD byl schopen identifikovat ve

správném pořadí. Vytvořené log soubory jsou SŘBD automaticky

uvolňovány v okamžiku, kdy již nejsou potřeba.



Z hlediska výkonnosti má značný význam umístění log

souborů, a to zejména vzhledem k vlastnímu databázovému souboru.

Defaultně jsou tyto dva typy souborů ukládány na stejný disk.

Přesměrování umístění log souborů může přispět ke zlepšení

výkonnosti (možnost paralelních I/O operací). Kromě toho se

obvykle provádí s cílem zvýšit diskovou kapacitu pro log soubory

a zvýšit odolnost systému (je málo pravděpodobné, že v jeden

okamžik zhavarují dva disky).



Dalším aspektem ovlivňujícím výkonnost je velikost log

souboru – tu lze měnit a pohybuje se řádově ve stovkách

kilobytů, resp. v několika megabytech. Velký log soubor zlepšuje

výkonnost databáze, jelikož není třeba tak často vytvářet nové

logy. Je-li však log soubor příliš veliký, zatěžuje to diskovou

kapacitu.



Dočasné soubory



V průběhu své činnosti může SŘBD vytvářet několik typů dočasných

souborů, a to zejména:



- třídicí soubory



- soubory k obecnému použití



Obecně platí, že vytváření těchto dočasných souborů opět

zpomaluje zpracování. Je proto velmi dobré, aby správce databáze

průběžně sledoval a analyzoval výskyt takovýchto souborů.







Třídicí soubory



Třídicí soubory obsahují konečný result set třídění

definovaného klauzulí DISTINCT, ORDER BY, GROUP BY nebo CREATE

INDEX. Pro každou třídicí klauzuli vytváří SŘBD obvykle jeden

třídicí soubor.



Obecně použitelné soubory



Tyto soubory obsahují result sety, dočasné tabulky, dočasné

indexy používané při zpracování joinu.



Databázové stránky



Stránka je základní datová struktura databázového souboru a

jednotka fyzického ukládaní v databázi. Databázový soubor se

skládá z řady stránek různého typu, ale stejné velikosti.

Typická velikost stránky se pohybuje v řádu několika kilobytů

(např. 2KB), resp. jejich násobků.



Obecně lze typy databázových stránek rozdělit v zásadě do třech

kategorií:



- datové stránky, obsahující vlastní data



- indexní stránky, obsahující informace pro přímý přístup k datům



- řídící stránky, na nichž si SŘBD ukládá interní informace,

které se využívají např. pro alokaci nových databázových

stránek, řízení logování transakcí, apod.



Pakliže se opět zaměříme na výkonnost databázové aplikace, je

možné konstatovat, že obecně mají na výkonnost negativní vliv

takové databázové stránky, které představují dodatečné požadavky

na operace čtení a zápisu. Patří sem zejména stránky pro

uchovávání tzv. dlouhých dat, tj. dat, jež mají ve fyzickém

návrhu přiřazen datový typ LONG (LONGCHAR, LONGVARCHAR). Dále

sem patří i tzv. rozšiřující stránky používané v případě, že se

určitá řádka tabulky nevejde na jednu datovou stránku. Oba

uvedené případy mají jedno společné: řádka tabulky je uložena na

více než jedné datové stránce. Je velmi pravděpodobné, že

stránky obsahující data jedné řádky nebudou uloženy ve stejném

fyzickém bloku, a tudíž pro načtení celé řádky bude zapotřebí

více operací čtení.



Cílem by tedy měla být minimalizace počtu rozšiřujících stránek.

Nástrojem pro realizaci tohoto cíle je pravidelná reorganizace

databáze, či v případě tabulek, u nichž se předpokládá

rozšiřování řádek vlivem aktualizace, je nutno nastavit větší

rezervovanou oblast pro rozšiřování (PCTFREE). Dále by v

případě, že se průměrná velikost řádky blíží použitelné

velikosti stránky, mělo dojít k rozdělení databázové tabulky na

dvě.



V případě stránek obsahujících „dlouhá“ data by měla být

popsaná fakta respektována a aplikační programy by se měly

vyvarovat dotazů typu SELECT *, kdy jsou na klienta přenášena

všechna data.







Databázová cache



Pro optimalizaci databázového vstupu a výstupu užívá SŘBD cache

paměť. Jde o část hlavní paměti počítače na stroji databázového

serveru, jež obsahuje kopie , které uživatel čte a zapisuje do

nich.



V okamžiku, kdy uživatel čte nebo zapisuje řádku či

index, SŘBD zjišťuje, zda stránka, v níž se příslušný řádek či

index nachází, je v cache či nikoliv. Pakliže tomu tak není,

zkopíruje ji do cache. Pokud stránka v cache již je, server

použije tuto kopii. Tento proces redukuje diskové I/O operace.



Při implicitním či explicitním komitu SŘBD zapisuje

záznam o komitu do log souboru. Nicméně databázové stránky v

cache paměti se zapisují zpět do databázového souboru na základě

LRU (least-recently used) algoritmu. Informace v log souboru

jsou dostačující k aktualizaci databáze v případě jejího

zhroucení, takže není nezbytně nutné stránku ukládat na disk

bezprostředně po komitu.



Aby se minimalizovala doba, po niž je třeba provádět

crash recovery, používají SŘBD obvykle mechanismus tzv. fuzzy

checkpointingu. Tento pojem znamená, že změněné databázové

stránky jsou v cache paměti během jednoho kontrolního okamžiku

(checkpoint) označeny a během dalšího pak zapsány na disk,

pakliže se tak již nestalo v rámci běžné správy cache paměti. V

závislosti na typu klientské aplikace mohou operace prováděné v

kontrolních bodech silně ovlivňovat výkonnost. V okamžiku, kdy k

tomu dochází, je možné zvýšit interval mezi jednotlivými

kontrolními body.



(Příště: Řízení sdíleného přístupu a indexování)