3 Ladění databázového systému Oracle
Transkript
Tomáš Pobuda Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Katedra informačních technologií Studijní program: Aplikovaná informatika Obor: Informační systémy a technologie Diplomant: Tomáš Pobuda Vedoucí diplomové práce: Ing. Dušan Chlapek Oponent diplomové práce: Ing. Martin Štrunc TÉMA DIPLOMOVÉ PRÁCE Ladění a testování databázových systémů pro potřeby digitálního archivu SAFE školní rok 2007/2008 Tomáš Pobuda Prohlášení Prohlašuji, že jsem diplomovou práci zpracoval samostatně a že jsem uvedl všechny použité prameny a literaturu, ze kterých jsem čerpal. V Praze dne ........ ………………………………. podpis Tomáš Pobuda Poděkování Rád bych tímto poděkoval panu Ing. Dušanovi Chlapkovi, za poskytnuté rady, cenné připomínky a odborné vedení celé práce. Tomáš Pobuda Abstrakt Práce se zabývá laděním databáze Oracle digitálního archivu SAFE. Konkrétně nastavením parametrů databáze a databázového. Je rozdělena na tři části. V první charakterizuje faktory, které ovlivňují výkon databáze. Ve druhé popisuje možnosti ladění a nastavení databáze Oracle. Ve třetí části je nejdříve představen systém SAFE, poté vybrán vhodný testovací nástroj pro generování zátěže a popis testovacích scénářů a naposled jsou provedeny testy a porovnány výsledky při různých nastaveních databáze. Cílem práce je popis a vyzkoušení ladění databáze Oracle, kterou využívá digitální archiv SAFE. Dalším cílem je test rychlosti vkládání souborů digitálního archivu SAFE při různých nastaveních (ukládání do databáze, na souborový systém). Těchto cílů je dosaženo generováním zátěže testovacím nástrojem a porovnáváním doby odezvy při různých nastaveních. Přínosem práce je především vyzkoušení ladění databáze Oracle, která je využívána digitálním archivem SAFE. Dokument může být použit jako příručka pro implementátory testované implementace digitálního archivu SAFE. Klíčová slova: SAFE, digitální archiv, ladění, testování, Oracle Tomáš Pobuda Abstract Thesis deal with tuning of database Oracle, which is used by digital archive SAFE. In the concrete deal with setting parameters of database. It is divided to three parts. In first part it characterizes factors that influence performance of database. In second part it describes possibilities of tuning and setting Oracle database. In third part it is first introduced digital archive SAFE, after that it is chosen suitable testing tool for workload generation and described test scenarios and last are performed tests and compared results at different database database settings. Goal of thesis is description and trial tuning of Oracle database, which is used by digital archive SAFE. Other goal is test of files inserting into digital archive at different settings (saving to the database, on file system). These goals are achieved by testing tool workload generation and compare response time at different settings. Contribution of this thesis is above all trial of tuning Oracle database, which is used by digital archive SAFE. Document can be used like handbook for implementatory of tested implementation of digital archive SAFE. Klíčová slova: SAFE, digital archive, tuning, testing, Oracle Obsah Tomáš Pobuda Obsah 1 ÚVOD............................................................................................................................................. 8 2 FAKTORY OVLIVŇUJÍCÍ VÝKON DATABÁZOVÝCH SYSTÉMŮ ................................. 9 2.1 2.2 2.3 2.4 2.5 2.6 3 NORMALIZACE DATABÁZE ..................................................................................................... 9 DENORMALIZACE DATABÁZE ............................................................................................... 10 INDEXY ................................................................................................................................. 11 KONSTRUKCE SQL PŘÍKAZŮ ................................................................................................ 13 VÍCEUŽIVATELSKÉ PROSTŘEDÍ (ZÁMKY) ............................................................................. 13 NASTAVENÍ PARAMETRŮ...................................................................................................... 15 LADĚNÍ DATABÁZOVÉHO SYSTÉMU ORACLE ............................................................. 16 3.1 NOVINKY A VYLEPŠENÍ V LADĚNÍ VÝKONU DATABÁZE ORACLE 11.1 ................................ 16 3.2 METODA THE ORACLE PERFORMANCE IMPROVEMENT METHOD ....................................... 17 3.3 NÁSTROJE PRO LADĚNÍ DATABÁZE ORACLE ........................................................................ 18 3.4 OPTIMALIZACE VÝKONU DATABÁZE .................................................................................... 19 3.4.1 Nastavení parametrů databáze ........................................................................................ 19 3.4.2 Automatické ladění výkonu .............................................................................................. 23 3.4.2.1 3.4.2.2 3.4.3 Konfigurace paměti.......................................................................................................... 29 3.4.3.1 3.4.3.2 3.4.3.3 3.4.3.4 3.4.3.5 3.4.4 Automatic Workload Repository (AWR) .............................................................................25 Automatic Database Diagnostic Monitor (ADDM)..............................................................27 Konfigurace buffer cache .....................................................................................................30 Konfigurace shared pool.......................................................................................................33 Large pool.............................................................................................................................36 Konfigurace Redo log buffer ................................................................................................36 Správa PGA paměti ..............................................................................................................37 Kalibrace a konfigurace I/O ............................................................................................ 43 3.4.4.1 3.4.4.2 Kalibrace I/O ........................................................................................................................43 Konfigurace I/O....................................................................................................................44 3.5 LADĚNÍ SQL PŘÍKAZŮ .......................................................................................................... 46 3.5.1 Identifikace zatěžujících SQL příkazů.............................................................................. 46 3.5.2 Ladění zatěžujících SQL příkazů ..................................................................................... 47 3.5.2.1 3.5.3 3.5.3.1 3.5.3.2 3.5.3.3 3.5.4 4 Manuální použití SQL Tuning Advisor................................................................................47 Optimalizace přístupu k objektům ................................................................................... 49 Spuštění SQL Access Advisor..............................................................................................49 Zobrazení doporučení SQL Access Advisor ........................................................................51 Implementace doporučení SQL Access Advisor ..................................................................51 Analýza vlivu ladění a jiných změn systému na výkonu SQL příkazů.............................. 52 LADĚNÍ DATABÁZE SYSTÉMU DIGITÁLNÍHO ARCHIVU SAFE ............................... 54 4.1 POPIS SYSTÉMU SAFE.......................................................................................................... 54 4.1.1 Charakteristika systému SAFE ........................................................................................ 55 4.1.2 Architektura ..................................................................................................................... 56 4.1.3 Datový model ................................................................................................................... 57 4.1.3.1 4.1.3.2 4.1.4 Definice objektů ............................................................................................................... 59 4.1.4.1 4.1.4.2 4.1.4.3 4.1.4.4 4.1.4.5 4.1.5 Statická část datového modelu .............................................................................................57 Dynamická část datového modelu ........................................................................................58 Struktura definice objektu ....................................................................................................59 Struktura definice vlastnosti .................................................................................................60 Struktura definice indexu .....................................................................................................62 Manipulace s definicemi.......................................................................................................62 Společné vlastnosti všech objektů ........................................................................................63 Vyhledávání ..................................................................................................................... 63 4.1.5.1 Objektové vyhledávání .........................................................................................................63 -6- Obsah Tomáš Pobuda 4.1.5.2 Fulltextové vyhledávání .......................................................................................................63 4.1.6 Popis testovacího systému SAFE ..................................................................................... 63 4.2 TESTOVACÍ NÁSTROJE .......................................................................................................... 63 4.2.1 Testovací nástroj Apache JMeter..................................................................................... 63 4.2.1.1 4.2.2 Tvorba testovacích scénářů ..................................................................................................63 Testovací scénáře............................................................................................................. 63 4.2.2.1 4.2.2.2 4.2.2.3 4.2.2.4 TEST1: Reprezentativní zátěž systému ................................................................................63 TEST2: Přidání faktury ........................................................................................................63 TEST3: Přidání objektu adresáře..........................................................................................63 TEST4: Přidání faktury se souborem ...................................................................................63 4.3 NASTAVENÍ DATABÁZE PRO OPTIMÁLNÍ VÝKON.................................................................. 63 4.3.1 Základní nastavení databáze ........................................................................................... 63 4.3.2 Nastavení paměti databáze .............................................................................................. 63 4.3.2.1 Ruční nastavení paměťových prostorů .................................................................................63 4.3.3 Nastavení I/O ................................................................................................................... 63 4.4 UKLÁDÁNÍ SOUBORŮ DIGITÁLNÍHO ARCHIVU ...................................................................... 63 5 ZÁVĚR ........................................................................................................................................ 63 6 LITERATURA............................................................................................................................ 63 7 TERMINOLOGICKÝ SLOVNÍK ............................................................................................ 63 8 PŘÍLOHY.................................................................................................................................... 63 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 PŘÍLOHA 1: POPIS STROMU TEST1 ...................................................................................... 63 PŘÍLOHA 2: POPIS STROMU TEST2 ...................................................................................... 63 PŘÍLOHA 3: POPIS STROMU TEST3 ...................................................................................... 63 PŘÍLOHA 4 : POPIS STROMU TEST4...................................................................................... 63 PŘÍLOHA 5: OBSAH TEXTOVÝCH SOUBORŮ .......................................................................... 63 PŘÍLOHA 6: VÝSTUP Z AGGREGATE REPORT A SROVNÁNÍ – NASTAVENÍ PAMĚTI .............. 63 PŘÍLOHA 7: VÝSTUPY AGGREGATE REPORT Z KAPITOLY 4.4 .............................................. 63 PŘÍLOHA 8: GRAFY MEDIÁNU ODEZVY PRO UŽIVATELE – KAPITOLA 4.4............................. 63 -7- Úvod Tomáš Pobuda 1 Úvod V poslední době vzrůstá počet firem, požadujících rychlý přístup k dokumentům. Tyto firmy pochází z různých segmentů trhu. Jsou to zejména finanční instituce (pojišťovny, společnosti poskytující nákupy na splátky) či průmyslové společnosti. V klasické papírové podobě dokumentů je vyhledávání pomalé, nákladné a hlavně závislé na tom kde dokument leží. Firmy požadují aplikaci, která bude dostatečně rychlá ve vyhledávání ve statisících až miliónech dokumentů, tak aby měli její zaměstnanci k dispozici dokumenty kdekoli a kdykoli. Například v pojišťovně aplikace ulehčí transport dokumentů mezi pobočkami. Díky aplikaci, si je může jakýkoli zaměstnanec s příslušnými právy vyhledat a zobrazit dokumenty, které potřebuje k práci, a nemusí čekat až mu je někdo pošle faxem nebo dokonce poštou. Základem takové aplikace je obrázek, zpravidla vícestránkový obrázek tiff (viz Term. slovník). V obrázcích se však nedá vyhledávat dle textových řetězců na nich uvedených. Obrázek tedy musí být opatřen popisnými údaji (metadaty). Například na faktuře to mohou být název dodavatele, identifikační číslo, daňové identifikační číslo, datum vystavení, atd. Dle těchto údajů lze pak fakturu vyhledat. Aby byly dokumenty přístupné kdykoli, je nutné použít vhodnou architekturu, kdy jsou dokumenty uloženy na jednom místě a jsou distribuovány jednotlivým klientům. Tedy architekturu klient / server. Pro dálkové přenosy (např. mezi pobočkami) lze využít celosvětovou síť internet. Aby byly dokumenty přístupné kdekoli, je dobré použít jako klienta nejrozšířenějšího klienta, což je internetový prohlížeč. Z toho také vyplívá, že aplikace, by měla být webovou aplikací. Požadavky na takovou aplikaci splňuje systém digitálního archivu SAFE. Tato diplomová práce zabývá laděním databázového systému Oracle, který je využíván digitálním archivem SAFE. Při použití digitálního archivu SAFE může být faktura či smlouva vyhledána kdekoli, kde je možné se připojit k internetu. Jsou to zejména faktury či smlouvy, jejichž denní přírůstky jsou u některých firem (např. pojišťovny) i několik tisíc. V databázi kde je uloženo několik miliónů dokumentů je komplikované vyhledávat. Při složitějších dotazech kdy se musí spojovat více tabulek (tzv. join) s velkým počtem záznamů je databáze extrémně zatížena. Objem dat však nemusí být jediný problém. Dalším je počet současně pracujících uživatelů. V těchto situacích je obtížné udržet odezvu pro uživatele na přijatelné úrovni. Hardwarové prostředky pro běh aplikace a databáze jsou zpravidla omezené a jen těžko lze přimět management k nákupu dalších prostředků. Právě zde se může uplatnit ladění databáze. Základem ladění databáze je sběr potřebných informací o jejím běhu (zpravidla tyto informace nazýváme statistiky). Tyto informace mohou pomoci odhalit problémy například v nastavení parametrů databáze, nedostatek hardwarových prostředků vzhledem k zátěži systému nebo problematické SQL příkazy. Cílem diplomové práce je prozkoumat možnosti ladění databázového systému Oracle. Poté tyto možnosti vyzkoušet prakticky pro databázi digitálního archivu SAFE a zjistit jak různé ladící postupy ovlivňují výkon systému, zejména odezvu pro uživatele. Dalším cílem je odpovědět na otázku, jestli je rychlejší ukládat soubory archivu do databáze Oracle či na souborový systém. Odpověď na tuto otázku by mohla změnit dosavadní způsob implementace systému SAFE, případně vysvětlit chování sytému v různých společnostech. Testy výkonu databází budou prováděny na hardware společnosti AiP SAFE s.r.o.. Tento dokument bude sloužit zejména jako informační zdroj pro databázové administrátory systému SAFE. Vzhledem k tomu, že bude popsáno ladění databázového systému Oracle, může být tento text užitečný pro všechny, kteří hledají informace o ladění databáze Oracle. -8- Faktory ovlivňující výkon databázových systémů Tomáš Pobuda 2 Faktory ovlivňující výkon databázových systémů V této úvodní kapitole si popíšeme některé faktory, které ovlivňují výkon databázových systémů. To nám poskytne přehled nad problémy s výkonem, které jsou řešeny jak programátory, tak správci databáze. Některé je možné ovlivnit bez zásahu programátora do aplikace (např. indexy,nastavení parametrů), ale některé můžeme ovlivnit pouze programátorským zásahem do aplikace (např. normalizace databáze, konstrukce SQL příkazů). Mezi hlavní faktory ovlivňující výkon databázových systémů patří: • Normalizace databáze • Denormalizace databáze • Indexy • Konstrukce SQL příkazů • Víceuživatelské prostředí • Nastavení parametrů 2.1 Normalizace databáze Normalizace databáze jedna z technik návrhu relačních databází, která minimalizuje redundantní informace. Dodržením pravidel pro normalizaci databáze nám pomůže vyvarovat se chyb v návrhu, které by mohly způsobovat nekonzistenci v datech při změnách. Stupně normalizace databáze rozlišujeme dle normálních forem. V praxi se normalizuje do třetí normální formy. My si tedy popíšeme první tři, které definoval Edgar F. Codd. První normální forma (1.NF) Tabulka je v první normální formě, pokud neobsahuje opakující se skupiny. Druhá normální forma (2. NF) Tabulka je v druhé normální formě, pokud je v 1. NF a žádné neklíčové atributy nezávisejí pouze na části primárního klíče. Třetí normální forma (3.NF) Tabulka je ve třetí normální formě, pokud je ve 2. NF a žádné atributy nezávisejí na jiných neklíčových atributech. Představme si jednoduchý příklad na, na kterém vysvětlíme normalizaci relační tabulky. Firma eviduje zaměstnance, jejich vedoucího a projekty na kterých pracuje. Nenormalizovaná tabulka by mohla vypadat jako na obrázku Obr. 1. Do 1.NF dostaneme tabulku tak, že odstraníme opakující se skupiny (ID_Projekt1, Nazev projektu1,...) a vytvoříme z nich novou tabulku ZamProjekt (viz Obr. 2) -9- Faktory ovlivňující výkon databázových systémů Obr. 1 - Nenormalizovaná tabulka Zamestnanec ID_Zamestnanec Jmeno Prijmeni ID_Oddeleni Nazev_oddeleni ID_Projekt1 Nazev_projektu1 ID_Projekt2 Nazev_projektu2 ID_Projekt3 Nazev_projektu3 Tomáš Pobuda Obr. 2 - 1. NF Zamestnanec ID_Zamestnanec Jmeno Prijmeni ID_Oddeleni Nazev_oddeleni 1. NF ZamProjekt ID_Zamestnanec ID_Projekt Nazev_projektu 2. NF Tabulka Zamestnanec vyhovuje 2. NF, ale tabulka ZamProjekt ne. Konkrétně její atribut Nazev_projektu nezávisí na obou klíčových atributech ID_Zamestnanec a ID_Projekt, ale pouze na ID_Projekt. Vytvoříme novou tabulku Projekt a relaci přes atribut ID_Projekt (viz Obr. 3). Obr. 3 - 2. NF Obr. 4 - 3. NF ZamProjekt ID_Zamestnanec ID_Projekt ZamProjekt ID_Zamestnanec ID_Projekt Projekt ID_Projekt Nazev_projektu Projekt ID_Projekt Nazev_projektu Zamestnanec ID_Zamestnanec Jmeno Prijmeni ID_Oddeleni Nazev_oddeleni Zamestnanec ID_Zamestnanec Jmeno Prijmeni ID_Oddělení 3. NF Oddělení ID_Oddělení Nazev_oddeleni Nyní nevyhovuje 3. NF tabulka Zamestnanec, kde atribut Nazev_oddeleni závisí na neklíčovém atributu ID_Oddělení. Vytvoříme proto novou tabulku Oddělení a relaci přes atribut ID_oddělení (viz Obr. 4). Vyšší stupně normalizace typicky vyžadují více tabulek což znamená více join operací a může zapříčinit omezení výkonu. Na druhou stranu snižují redundanci dat, což může výkon zlepšit díky menšímu objemu načítaných dat. 2.2 Denormalizace databáze Normalizace je proces ukládání jednoho údaje pouze na jedno místo. To je výhodné pro aktualizace, ale ne pro jejich získávání. Pokud je údaj uložen pouze na jednom místě, získání více různých údajů, které spolu souvisejí znamená, že se musí databázový sytém „kouknout“ na více míst. To může mít za následek zpomalení procesu získávání dat. Na druhou stranu update operace jsou díky tomu rychlejší. Obecně se doporučuje, aby byly databáze navrhovány na základě normalizovaného datového modelu. Přesto však existují situace, kdy je dobré uvažovat o denormalizaci. Tedy o procesu - 10 - Faktory ovlivňující výkon databázových systémů Tomáš Pobuda ukládání jednoho údaje na více místech, což zrychlí získávání dat na úkor zpomalení jejich modifikace. Důvody denormalizace Jediným důvodem denormalizace je zvýšení výkonu při získávání dat z tabulek. Podle následujících ukazatelů můžeme identifikovat tabulky, u kterých by se dalo uvažovat o denormalizaci: • Existuje hodně kritických dotazů a reportů, které se dotazují na data z více než jedné tabulky. A tyto požadavky musí být zpracovávány v on-line prostředí. • Existují opakující se skupiny, které potřebují být zpracovávány ve skupině a ne individuálně. • Musí být aplikováno hodně výpočtů na jeden či více sloupců, než může být proveden dotaz. • K tabulkám je přistupováno více uživateli různými způsoby (update, select) ve stejných časových intervalech. • Existuje mnoho rozsáhlých primárních klíčů, které jsou těžkopádné pro dotazy a spotřebovávají velké množství místa na discích, když jsou přenášeny jako cizí klíče do jiných tabulek • Některé sloupce jsou dotazovány častěji než ostatní. O denormalizaci bychom měli uvažovat když jsou sloupce dotazovány více než 60 % času. Existuje několik typů denormalizovaných tabulek: • Pre-Joined tables - předběžně spojené tabulky • Report Tables – tabulky reportů • Mirror Tables – zrcadlené tabulky • Split Tables – rozdělené tabulky • Combined Tables – kombinované tabulky • Redundant Data – redundantní data • Repeating Groups – opakující se skupiny • Derivable Data – odvoditelná data • Hierarchies - hierarchie Více o nich pojednává článek [MULLINS]. My je zde podrobně popisovat nebudeme. 2.3 Indexy Index je datová struktura, která umožňuje rychlejší vyhledávání záznamů v tabulce podle indexovaného sloupce (nebo více sloupců, pokud se jedná o složený index). Index obsahuje hodnoty z indexovaného sloupce a ukazatel na řádek, který hodnotě odpovídá. Představme si například tabulku, kde jednoznačným identifikátorem je sloupec ID. Když je pak položen dotaz SELECT * FROM tabulka WHERE ID=1234 a neexistoval by index, musel by databázový systém procházet celou tabulku (načíst všechna data tabulky do paměti). Průměrný počet řádků, které by prohledal je n/2, kde n je počet řádků tabulky. Když je index vytvořen nemusí se procházet postupně celá tabulka. Vyhledání záznamu je rychlejší a je k němu potřeba méně I/O operací disku. Většina databází ukládá indexy ve formě B-stromu (viz Obr. 5). B-strom je stromová struktura seřazených hodnot, kterou můžeme rozdělit na: - 11 - Faktory ovlivňující výkon databázových systémů Tomáš Pobuda • branch blocks (větve) – Všechna patra, kromě posledního. Obsahují indexovaná data, která odkazují na nižší indexové bloky. • leaf blocks (listy) – Nejnižší patro stromu. Zde jsou všechny indexované hodnoty a jejich rowid, k určení hledaného řádku. Obr. 5 - Struktura B-stromu [ORA-DC] Klasické indexy uložené ve formě B-stromů, nemusí být vždy nejvhodnějšími pro všechny typy atributů. Jsou to atributy s nízkou mohutností (např. pohlaví - dvě hodnoty M (muž) , Z (žena)). Zde by klasický index vracel příliš mnoho řádků – jedna indexová hodnota by odkazovala na velké množství řádků. Řešení této situace může být bitmapový index. Princip spočívá v rozložení atributu do bitové masky. Bitmapový index efektivně zpracovává operátory AND a OR ve WHERE klauzuli, protože se provedou boolean operace přímo na indexech, před tím než se převede bitmapa na rowid. Představme si příklad tabulky kde jsou sloupce region a pohlavi (viz Tab. 1). Vytvoříme bitmapový index nad sloupci region (viz Tab. 2) a pohlavi (viz Tab. 3). Tab. 1 - Příklad tabulky pro bitmapový index id 1 2 3 4 region východ střed východ západ pohlavi M Z Z M Tab. 2 - Bitmapový index sloupce region region = východ 1 0 1 0 region = západ 0 0 0 1 region = střed 0 1 0 0 - 12 - Faktory ovlivňující výkon databázových systémů Tomáš Pobuda Tab. 3 - Bitmapový index pro sloupec pohlavi pohlaví = M 1 0 0 1 pohlaví = Z 0 1 1 0 Provedení dotazu SELECT COUNT(*) FROM tabulka WHERE pohlavi=‘M‘ AND region=‘východ‘, který najde všechny záznamy kde pohlaví je M a region je výhod, bude díky bitmapovému indexu velice rychlé (viz Tab. 4) Tab. 4 - Výpočet booleovské operace region = východ 1 0 1 0 pohlavi = M 1 0 0 1 výsledek (AND) 1 0 0 0 2.4 Konstrukce SQL příkazů Špatný přístup ke konstrukci SQL příkazů může mít za následek špatný výkon aplikace. Je možné sestavit dva dotazy vracející stejný výsledek, ale každý bude jinak efektivní (např. jeden prohledá celou tabulku, jiný pouze jeden řádek). Pokud takový dotaz programátor zakomponuje do aplikace, databázový administrátor může dotaz odhalit (jestliže zatěžuje systém), ale opravit ho musí programátor v aplikaci. Existuje několik obecných zásad jak psát SQL dotazy. My si je zde uvedeme: • Omezte výsledek dotazu použitím klauzule WHERE – tím, že bude klientovi vráceno méně řádků, bude za potřebí přenést méně dat po síti a to může zvýšit celkový výkon dotazu. • Omezte výsledek dotazu výběrem sloupců, které opravdu potřebujete – jestliže nevrátíme klientovy všechny sloupce, ale jen některé, tak bude zapotřebí přenést méně dat po síti ke klientovi, což může zvýšit celkový výkon dotazu. • Používejte constraints (omezení) místo triggerů, kdykoli je to možné – constraints jsou mnohem efektivnější než triggery. To znamená, že pokud se budeme držet tohoto pravidla, budou naše dotazy efektivnější. • Vyhýbejte se klausuli HAVING – tato klauzule se používá k omezení skupin ve výsledku dotazu s klauzulí GROUP BY. Pokud použijeme GROUP BY s HAVING, klauzule GROUP BY rozdělí řádky na skupiny a agreguje jejich hodnoty, klauzule HAVING odstraní nežádoucí agregované skupiny. To ukazuje, že práce na těchto skupinách klauzulí GROUP BY je zbytečná. Lepší je použít klauzuli WHERE kde odstraníme nepotřebné řádky a pak je seskupíme pomocí GROUP BY bez HAVING. • Co nejméně používejte klauzuli DISTINCT – pokud to není nutné a nepotřebujeme odstranit duplicitní hodnoty ve sloupci. Použití této klauzule je náročné na výkon. 2.5 Víceuživatelské prostředí (zámky) Při zpracování transakcí ve víceuživatelském prostředí se může stát, že transakce přistupují ke stejným datům v jeden okamžik. Pokud by neexistovali mechanismy jak takové situace řešit, mohlo by se stát, že jedna transakce změní data a než potvrdí změnu, tyto data změní jiná transakce. Obecně můžou vzniknout tři problémy: • Dirty reads – čtou se řádky změněné nějakou transakcí, ale ještě neproběhl commit (potvrzení). - 13 - Faktory ovlivňující výkon databázových systémů Tomáš Pobuda • Nonrepeatable reads – při opakovaném čtení stejných dat zjistí, že byla změněna jinou transakcí • Phantom reads – při opakovaném čtení stejných dat zjistí, že byla přidána nová data jinou již potvrzenou (commit) transakcí. Proto aby nevznikaly tyto problémy s konzistencí byly standardem ANSI/ISO SQL (SQL 92) definovány izolační úrovně: • Read uncommited – poskytuje nejvyšší propustnost. Blokovány jsou souběžné aktualizace, ale je možné, aby transakce četla nepotvrzené změny jiných transakcí. Tuto izolační úroveň lze použít pouze u transakcí, které buď pouze data mění nebo u nich nezáleží na korektnosti a konzistenci dat. Nedoporučuje se používat. • Read comminted – tato izolační úroveň blokuje souběžné aktualizace a dovoluje číst pouze potvrzené změny jiných transakcí. Použít jí lze u transakcí, které zejména mění data a nevyžadují stabilní pohled na data. • Repeatable read – mimo blokací úrovně read commited, zajišťuje stabilní pohled na čtená data (čtená data se uzamknou). Vhodné použití je u transakcí, které vyžadují stabilní pohled na data (např. generování sestav) • Serializable – vynucuje takové chování transakcí, jako by byly prováděny postupně. Jelikož při této úrovni izolace dochází k častému blokování transakcí, je vhodné ji používat jen v opodstatněných případech Vlastnosti izolačních úrovní shrnuje tabulka Tab. 5 , kde „X“ znamená výskyt daného problému a „-“ znamená, že je problém eliminován. Tab. 5 - Izolační úrovně Read uncommited Read comminted Repeatable read Serializable Dirty Read Nonrepeatable read Phantom Read X X X X X X - Problémy s izolačními úrovněmi • Blokování – Ideálním případem pro konzistenci dat je izolační úroveň Serializable. Při této úrovni však dochází k častému vzájemnému blokování transakcí a to způsobuje degradaci výkonu. Je tedy nutné nalézt kompromis mezi konzistencí dat a propustností systému. • Deadlock – Deadlock vzniká, když transakce A čeká na zámek na záznam aktuálně zamčený transakcí B a zároveň transakce B čeká na zámek na záznam aktuálně uzamčený transakcí A. Příklad deadlocku: V čase A jedna transakce (T1) uzamkne řádek empno=1000 a druhá transakce (T2) uzamkne řádek empno=2000. V čase B se pokusí transakce T1 uzamknout řádek empno=2000, který je uzamčen transakcí T2 a začne čekat než se řádek uvolní. Poté se pokusí transakce T2 uzamknout řádek empno=1000, který je uzamčen transakcí T1 a vznikne deadlock. Nezáleží na tom jak dlouho by transakce čekali na odemčení záznamu. V této situaci není možné, aby se některá z nich dočkala odemčení záznamu. Když taková situace nastane databázový systém Oracle jednu z čekajících transakcí zruší (rollback), a tím odstraní konfliktní zámky. Druhá transakce obdrží chybu ORA00060 a obvykle by měla být rollbackována nebo může počkat a zkusit znovu poslední příkaz. Obr. 6 - Deadlock [ORA-DC] - 14 - Faktory ovlivňující výkon databázových systémů Tomáš Pobuda Vzhledem k rollbackům a čekáním, deadlocky ovlivňují negativně výkon databáze. Měli bychom jejich výskyt zredukovat na minimum. 2.6 Nastavení parametrů Parametry lze nastavovat buď pro databázi nebo databázový systém. Databázi chápeme jako soubor, který je „obhospodařován“ databázovým systémem. Mezi parametry databáze se řadí nastavení jako je počet, velikost souborů, způsob zvětšování datových souborů, atd. Parametry databázového systému míníme nastavení inicializačních parametrů, paměťových prostorů, velikosti databázového bloku, atd. Jak je vidět, faktorů ovlivňujících výkon databázového systému je mnoho. Každý se dá nějakým způsobem ladit a zlepšovat tak výkon. My se zaměříme především na nastavování parametrů databáze a databázového systému. - 15 - Ladění databázového systému Oracle Tomáš Pobuda 3 Ladění databázového systému Oracle V této kapitole jsou popsány možnosti ladění databázového systému Oracle 11g Release 1 (11.1). Informace v této kapitole jsou čerpány téměř výhradně z online dokumentace na stránkách společnosti Oracle. Ta je opravdu na vysoké úrovni. Seznam kapitol: • Novinky a vylepšení v ladění výkonu databáze Oracle 11.1 • Metoda The Oracle Performance Improvement Method • Nástroje pro ladění databáze oracle • Optimalizace výkonu databáze V prvních třech podkapitolách se seznámíme s novinkami a vylepšeními v ladění výkonu databázového systému Oracle 11.1. Dále pak s metodou The Oracle Performance Improvement Method, abychom si ukázali jak se při ladění postupuje. A naposled uvedeme stručný popis nástrojů pro ladění databáze Oracle. Kapitola 3.4 se zabývá zejména správným nastavením parametrů databáze. To jak nastavit určitý parametr obvykle určíme dle nějaké statistiky či statistik. Dalšími tématy tak jsou zajištění sběru statistik a u každého parametru též kde statistiku zjistit. V poslední kapitole je popsáno jak využít nástroje pro automatické ladění SQL příkazů (SQL Tuning Advisor a SQL Access Advisor). 3.1 Novinky a vylepšení v ladění výkonu databáze Oracle 11.1 Úvodem této kapitoly si představíme nové či vylepšené funkce pro ladění výkonu, které Oracle 11.1 nabízí. Nejde o jejich vyčerpávající popis, ale spíše o stručné seznámení. Podrobněji budou jednotlivé nástroje a funkce popsány v samostatných kapitolách. • Vylepšení ASH (active session history) - Statistiky ASH nyní poskytují informace o činnostech na úrovni řádků pro každý SQL příkaz. Mohou být využity například při identifikaci části SQL příkazu, která se při provádění nejvíce podílela na celkovém čase provádění tohoto příkazu. • Vylepšení ADDM (automatic database diagnostic monitor) - ADDM bylo vylepšeno tak, aby provádělo analýzu na databázových clusterech na různých úrovních granularity (databázový cluster, instance databáze) v daný časový interval. • Automatizované ladění SQL - Je možné automatizovat plánování činností SQL Tuning Advisor, aby běžely během automatické údržby. • Výchozí bod AWR (advaced workload repository) - Výchozí bod obsahuje data o výkonu za daný časový interval pro porovnání s jinými časovými intervaly s podobnou zátěží pokud se vyskytnou problémy s výkonem. • Database Replay (~ přehrání databáze) - Je možné zachytit zatížení databáze na produkčním systému a „přehrát“ ho na testovacím systému, aby bylo možné zjistit, jestli změny (upgrade databáze) přináší požadované výsledky. • Vylepšené statistiky I/O - Statistiky I/O jsou sbírány ze všech volání I/O databází Oracle v těchto úrovních: zákaznická skupina, databázový soubor, databázová funkce. • Vylepšená údržba statistik optimizátoru - Sběr a publikování statistik je odděleno. Statistiky pro optimizátor jsou sbírány jako „nevyřízené“ a po jejich otestování zveřejněny jen platné statistiky. - 16 - Ladění databázového systému Oracle Tomáš Pobuda • Rozšířené statistiky - Optimizátor sbírá údaje o skupinách sloupců v tabulce (MultiColumn statistiky) k analýze závislostí sloupců ve skupině sloupců. Také shromažďuje údaje o výrazech ve sloupcích. • Kalibrace I/O - I/O kalibrační funkce Oracle databáze umožňuje zhodnotit výkonnost úložného subsystému a rozhodnout jestli jsou problémy s I/O výkonností zapříčiněné databází nebo úložným subsystémem. • Cache výsledků dotazů - Lze ukládat výsledky často zpracovávaných příkazů SQL v cache serveru nebo klienta. To umožňuje dosahovat rychlejší odezvu při těchto příkazech. • Monitorování SQL v reálném čase - Takové monitorování umožňuje sledování dlouhotrvajících SQL příkazů, právě když jsou vykonávány. Statistiky pro toto sledování jsou v nových pohledech V$SQL_MONITOR A V$PLAN_MONITOR. • SQL Performance Analyzer (analyzátor výkonu SQL) - Umožňuje předpovídat dopad změn systému na výkon SQL, testováním těchto změn při SQL zátěži na testovacím systému. • Výchozí body SQL exekučního plánu - Změny v exekučním plánu pro SQL příkaz může zapříčinit velké snížení výkonu. Databáze získává, vybírá a vyvíjí výchozí body SQL plánů, tak aby optimalizátor nepoužíval nový plán, dokud není ověřeno, že je efektivnější než stávající plán. Tato funkcionalita nahrazuje „plan stability“ používané v předchozí verzi Oracle Database (10gR2). • Tvorba testových případů SQL - Nástroj SQL Test Case Builder umožňuje vytvořit testový případ, který jde „přehrát“ na jiném systému. Problém s SQL tak může být vyřešen na testovacím systému. 3.2 Metoda The Oracle Performance Improvement Method Tato metoda si klade za cíl identifikovat a odstraňovat úzká místa systému, která mohou snižovat výkon databáze. Odstraněním jednoho úzkého místa však může být odhaleno jiné. Po odstranění jednoho úzkého místa tedy nemusí ihned dojít ke zlepšení výkonu. Zlepšení může nastat až po několika cyklech (identifikace, odstranění úzkého místa). Zlepšování výkonu je tedy iterativní metodou. Postup metody The Oracle Performance Improvement Method je rozdělen do šesti kroků: 1. Provést výchozí kontrolu: a) Získat informace od uživatelů a definovat cíle ladění. b) Obstarat si kompletní statistiky operačního systému, databáze a aplikace ze systému, kde je výkon dobrý i špatný. c) Zkontrolovat jestli je plně využíván hardware a zdroje operačního systému, které mohou ovlivnit výkon pro uživatele. Také ověřit, že všechen hardware pracuje bezchybně. 2. Zkontrolovat jestli se nejedná o jednu z deseti nejběžnějších chyb v Oracle popsaných níže. ADDM automaticky detekuje a hlásí devět z deseti těchto chyb. 3. Vytvoření konceptuálního modelu chování systému, kde budou zaznamenány symptomy, které jsou vodítky k pochopení problémů s výkonem. 4. Návrh série akcí odstraňující problémy s výkonem a jejich očekávaného efektu. Po té tyto akce vykonáváme v takovém pořadí v jakém pozitivně ovlivňují výkon aplikace. Nástroj ADDM (automatic database diagnostic monitor) vytváří návrhy jak zlepšit výkon, každý s očekávaným přínosem. Důležité je aplikovat jednotlivé akce jednotlivě, tak aby bylo možné změřit jejich dopad na systém. Pokud bychom aplikovali více změn najednou, pak by bylo nemožné měřit jejich jednotlivé přínosy. - 17 - Ladění databázového systému Oracle Tomáš Pobuda 5. Ověření zda měli provedené změny očekávaný efekt a zda se uživatel zaznamenal zlepšení výkonu. Pokud není dosaženo očekávaného efektu, pokračujeme v hledání dalších úzkých míst a vylepšujeme konceptuální model. 6. Opakovat poslední tři kroky dokud nebudou splněny cíle ladění nebo se stane nemožným tyto cíle splnit díky dalším omezením. Deset nejčastějších chyb v databázi Oracle: 1. Špatná správa spojení – časté připojování a odpojování aplikace od databáze. 2. Špatné využití kursorů a předem přeložených dotazů – nepoužívání kursorů má za následek opakovaný překlad dotazů. Pokud nejsou dotazy sestavovány s dosaditelnými proměnnými vyžaduje každé spuštění dotazu jeho opakované přeložení a vytvoření plánu zpracování. Měli bychom být nedůvěřivý k aplikacím generujícím dynamické SQL. 3. Špatný kód SQL – špatný SQL kód je takový, který využívá více systémových zdrojů než je přiměřené pro prostředí dané aplikace. SQL příkazy, které spotřebovávají nadměrné množství systémových zdrojů by měli být prozkoumány, jestli je nejde zlepšit. 4. Použití nestandardních inicializačních parametrů – takové nastavení může být provedeno na základě špatných rad nebo nesprávných předpokladů. Většina systémů pracuje s přijatelným výkonem, jestliže jsou nastaveny pouze základní parametry. Pokud tedy nastavujeme nějaké parametry, je nutné znát dopady těchto nastavení na celou databázi. 5. Špatné I/O databáze – provozovatelé databází rozmístí špatně soubory databáze na disky, které má zrovna k dispozici. Jiní se příliš soustředí na kapacitu disků a ne na jejich propustnost. 6. Špatné nastavení Redo logů – málo a malé redo logy mohou zapříčinit nadměrnou vytíženost buffer cache (cache pro zápis do datových souborů) a následně také I/O systému. Zápis do logů pak „zdržuje“ celou databázi. 7. Serializace datových bloků v buffer cache kvůli nedostatku volných listů, skupin listů, transakčních slotů nebo rollback segmentů – to je běžné u aplikací, které vkládají hodně záznamů a byla nastavena velikost databázového bloku více než 8Kb nebo u aplikací s velkým množstvím aktivních uživatelů a málo rollback segmenty. 8. Dlouhé zbytečné full table scany – mohou být zapříčiněny špatným designem transakcí, chybějícími indexy nebo špatnou optimalizací SQL příkazů. Způsobují zejména přetížení I/O systému. 9. Vysoké objemy rekurzivního SQL – pokud se hodně rekurzivních SQL příkazů vykonává pod uživatelem SYS, může to znamenat operace správy místa databáze, jako je například alokace extentů. Odezva systému se tím může značně zhoršit. 10. Chyby při nasazení a migraci – při migraci z vývojového prostředí nebo starší implementace se může stát, že schéma vlastnící tabulky nebylo úspěšně zmigrováno. Příkladem jsou chybějící indexy nebo chybné statistiky. Dochází pak k přetěžování databáze. 3.3 Nástroje pro ladění databáze Oracle Chceme-li ladit výkon databáze, potom je nutné sbírat a analyzovat data týkající se výkonu databáze. Oracle nabízí dostatek nástrojů jak pro sběr dat, tak pro analýzu. Většina z těchto nástrojů je automatická a je řízena prvkem Oracle backgroud processes. Aby byly statistiky sbírány automaticky musí být nastaven inicializační parametr STATISTICS_LEVEL na hodnotu TYPICAL nebo ALL. Jednotlivé nástroje popíši důkladně v kapitole Optimalizace výkonu instance databáze. Nyní uvedeme seznam nástrojů a jejich stručný popis. • Oracle Enterprise Manager (EM) – základní nástroj pro správu databáze založený na webovém uživatelském rozhraní. Odtud lze spravovat databázi (databáze) a také ostatní - 18 - Ladění databázového systému Oracle Tomáš Pobuda nástroje, které jsou do tohoto prostředí většinou implementovány. Jsou zde také rádci jako například Memory Advisor (optimalizace paměti pro instanci databáze) nebo jiní rádci pro optimalizaci MTTR(mean time to recovery), správu segmentů nebo nastavení undo tablespace. Na stránce Performance page v EM můžeme též sledovat zatížení systému v reálném čase. • Automatic Workload Repository (AWR) – sbírá, zpracovává, a udržuje statistiky výkonu pro účel detekce problémů a sebe-ladění (automatické ladění). • Automatic Database Diagnostic Monitor (ADDM) – analyzuje data nasbíraná AWR a odhaluje možné problémy s výkonem databáze. • SQL Tuning Advisor – umožňuje rychlou a účinnou optimalizaci SQL příkazů bez změn v příkazech. • SQL Access Advisor – poskytuje rady ohledně materializovaných pohledů, indexů a logů materializovaných pohledů. • End to End Aplication Tracing – nástroj pro identifikaci uživatele, služby či komponenty, která enormně zatěžuje systém. • Server-generated Alerts – databáze umí upozornit na hrozící nebezpečí. • V$ Performance Views – V$ pohledy jsou zdrojem dat pro všechny ladící nástroje. Tyto pohledy jsou založeny na paměťové struktuře načtené při startu databázové instance. Paměťové struktury a pohledy, které je reprezentují, jsou automaticky udržovány databází při jejím běhu. 3.4 Optimalizace výkonu databáze V této kapitole popíšeme jak ladit jednotlivé prvky databáze, aby byl optimalizován výkon databázové instance Oracle. 3.4.1 Nastavení parametrů databáze Tato kapitola obsahuje přehled metodologie nastavování parametrů databáze. Ačkoli většina nastavení lze provádět při spuštěné databázi, správným nastavením inicializačních parametrů lze získat další významné zlepšení výkonu. Inicializační parametry Běžící databáze je nastavena dle inicializačních parametrů. Tyto parametry načítá při startu ze souboru parameter file. V tabulce 6 uvedeme důležité parametry, které mají vliv na výkon databáze. - 19 - Ladění databázového systému Oracle Tomáš Pobuda Tab. 6 – důležité inicializační parametry ovlivňující výkon [ORA-PTG] Parametr COMPATIBLE DB_BLOCK_SIZE MEMORY_TARGET SGA_TARGET PGA_AGREGATE_TARGET PROCESSES SESSIONS UNDO_MANAGEMENT UNDO_TABLESPACE Popis Specifikuje verzi se kterou musí být Oracle server kompatibilní.Pokud například aktualizuji verzi databáze, ale aplikace která ji využívá je optimalizována na předchozí verzi, mohu zde nastavit tuto předchozí verzi a přesto využívat např. vylepšení správy v nové verzi. Určuje velikost databázového bloku ukládaného v souborech a cacheovaný v SGA. Pro systémy s transakčním zpracováním je to obvykle 8192 bajtů. Určuje celkovou velikost paměti. Aktivuje automatickou správu paměti. Oracle pak sám rozděluje paměť mezi SGA a PGA. Určuje celkovou velikost všech součástí SGA (system global area). Pokud je nastaven SGA_TARGET pak jsou paměťové prostory automaticky rozděleny mezi buffer cache, Java pool, shared pool, large pool (viz Obr. 7) Určuje celkovou velikost alokované paměti pro server procesy připojené k databázi. Nastavuje maximální počet procesů, které mohou být spuštěny databází. Toto je velmi důležitý parametr, jelikož se z něj odvozuje mnoho jiných parametrů (počet sessions, transactions, atd.). Tento parametr se odvozuje od parametru PROCESSES Nastavuje se s ním mód undo space management. Defaultní hodnota je AUTO. Určuje tablespace, který bude undo tablespacem po spuštění databáze. Nastavení Undo Space Databáze používá prostor undo space pro účely zotavení,konzistenci čtení a rollback příkazy. Tato data jsou uložena v undo tablespacech. Oracle doporučuje nastavení parametru UNDO_MANAGEMET na AUTO. Manuální undo management využívající rollback segmenty je podporován pouze kvůli zpětné kompatibilitě. Obr. 7 – Struktura paměti Oracle Database [KRCH] - 20 - Ladění databázového systému Oracle Tomáš Pobuda Nastavení velikosti souborů Redo logů Velikost souborů redo logů může ovlivňovat výkon, protože ovlivňuje chování procesů database writer (zápis do souborů na disk) a archiver (zápis redo logů do archivních logů). Obecně větší redo logy poskytují lepší výkon. Poddimenzované log soubory zvyšují četnost checkpointů (intervaly zápisu) a snižují výkon. Optimální velikost redo logů lze získat dotazem na view V$INSTANCE_RECOVERY ve sloupci OPTIMAL_LOGFILE_SIZE nebo také v Enterprise Manager na stránce Redo Log Groups. Musí být nastaven parametr FAST_START_MTTR_TARGET, který udává jaký může být počet bloků (systémových) redo log souboru mezi posledním checkpointem a posledním zapsaným blokem. Vždy nemusí být možné poskytnout doporučení pro velikost redo logů. Avšak redo logy velikosti stovek megabajtů až jednotek gigabajtů jsou považovány za rozumné nastavení. Vždy bychom měli přihlížet k tomu, kolik redo operací generuje náš systém. Pro přibližné určení velikosti redo logů se uvádí, že by neměl nastat switch (změna z jedné redo log group na jinou – tzn. zaplnění jedné redo log group) dříve než po dvaceti minutách. Vytvoření dodatečných tablespace V každé databázi by měli být kromě tablespace SYSTEM a SYSAUX další tablespace: • temporary tablespace – využívá se např. pro třídění • undo tablespace – obsahuje informace pro konzistenci čtení, zotavení a rollback příkazy. • alespoň jeden tablespace pro aplikaci Pro permanentní tablespace (permanent tablespace) je doporučováno použití automatické správy volného místa v segmentech (automatic segmet-space managemet). Takovéto tablespace se obvykle nazývají bitmapové tablespace. Dále je doporučováno nastavení locally managed tablespace pro správu extentů. Pro dočasné tablespace (temporary tablespace) se doporučuje nastavení locally managed tablespace s UNIFORM extentem o velikosti 1 MB. Dobře nastavené dočasné tablespace pomáhají optimalizovat výkon disku při třídících operacích. Měli bychom monitorovat dočasné tablespace a zjišťovat kolik extentů je alokováno pro dočasný segmet. Pokud aplikace nadměrně využívá dočasné tabulky nebo uživatelé souběžně používají dočasné tabulky, měli bychom snížit velikost extentu např. na 256KB. Jelikož každé použití dočasné tabulky vyžaduje nejméně jeden extent. - 21 - Ladění databázového systému Oracle Tomáš Pobuda Obr. 8 – přehled nastavení správy prostoru [KRCH] EXTENT MANAGEMENT (Jak se eviduje volné místo v tablespace, které nebylo alokováno do segmentů) SEGMENT SPACE MANAGEMENT (Jak se eviduje volné místo alokované do segmentu) LOCAL (Locally Managed Tablespace) AUTOALLOCATE (Rostoucí velikost extentů) AUTOMATIC (Bitmap) UNIFORM (Stálá velikost extentů) DICTIONARY MANUAL (Dictionary Managed Tablespace) (Freelisty) Zastaralé technologie, nedoporučuje se používat Vytváření a správa tabulek pro optimální výkon Když instalujeme aplikace, úvodním krokem je vytvoření všech nezbytných tabulek a indexů. Pokud vytvoříme segmet, například tabulku, Oracle alokuje místo pro data v databázi. Pokud dojde později k nárůstu dat v tabulce a překročí alokované místo, potom Oracle rozšíří segmet o extent. Nastavením parametru PCTFREE říkáme, kolik volného místa (v procentech) se má v databázovém bloku udržovat pro možné updaty existujících řádků. To znamená, že pokud je dosažena hranice např. 20% volného místa, blok již nedovolí vkládat nové řádky. - 22 - Ladění databázového systému Oracle Tomáš Pobuda Obr. 9 – Datový blok (databázový blok)[ORA-DC] Header (Common and Variable) Hlavička obsahuje informace o adrese bloku, typu segmentu (např. data, index). Table Directory Informace o tabulce, která má řádky v tomto bloku. Row Directory Informace o počtu řádků v bloku a adresy dat pro každý řádek. Free Space Volné místo pro vkládání nových řádků nebo aktualizace řádků, která potřebuje další místo (např. když se změní hodnota null na nonnull hodnotu) Row Data Data řádků tabulek či indexů (řádky mohou být ve více blocích) Komprimace tabulky Heap-organized tabulky (neřazené záznamy jeden za druhým) lze ukládat v komprimovaném formátu. Komprimují se nejen duplicitní hodnoty v jednom sloupci, ale tam kde je to možné, je snaha komprimovat i vícesloupcové kombinace hodnot. Komprimace je vhodná pro tabulky, které jsou určeny zejména pro čtení. V tomto případě může komprimace zvýšit výkon při operacích čtení, protože se přenáší menší množství dat a tak je za potřebí méně I/O operací. Obnovení nepoužívaného místa Je běžné, že časem se místo segmentu fragmentuje nebo je mu alokováno hodně volného místa důsledkem update a delete operací. To zapříčiňuje řídce obsazené objekty a může způsobovat snížení výkonu při DML operacích. V databázi Oracle lze tento problém řešit pomocí Segmet Advisor. Tento nástroj poskytuje informaci o objektech, které mají místo pro obnovení, tak že v nich spočítá úroveň fragmentace. Pokud má některý objekt takové místo, pak je možné zmenšit segment nebo dealokovat nepoužité místo na konci segmentu. Indexování Dat Nejefektivnější způsob vytváření indexů je po nahrání dat. Díky tomu je správa místa jednodušší a nemusí vytvářet zvlášť index se pro každý vkládaný řádek(SQL*Loader to dělá automaticky). Pokud chceme zrychlit vytváření indexu a máme dost volných prostředků (CPU, disk controllers) použijeme paralelní zpracování SQL příkazu (př. CREATE INDEX PARALLEL). To znamená, že více procesů pracuje současně při zpracování jednoho SQL příkazu. Během vytváření indexů tabulek musí být data setříděna. Třídění je tím rychlejší, čím více paměti je pro třídění použito. Oracle doporučuje nastavit automatické nastavení velikosti SQL working area (místo pro práci s SQL). Toho docílíme nastavením inicializačního parametru PGA_AGREGATE_TARGET. 3.4.2 Automatické ladění výkonu Aby bylo možné zjistit příčinu výkonnostních problémů, je nutné mít statistiky. Bez nich by nebylo možné provádět diagnostiku. Oracle generuje velké množství kumulativních statistik, které jsou dostupné například přes dynamické pohledy V$SESSTAT nebo V$SYSSTAT. Když je zastavena (shutdown) databáze, tak jsou tyto statistiky vymazány. O jejich uchovávání se stará Automatic Workload Repository (AWR). Oracle dále zaznamenává statistiky, které nazýváme metrické. Tyto statistiky říkají jak mnoho se mění kumulativní statistiky (např. počet volání databáze za sekundu). - 23 - Ladění databázového systému Oracle Tomáš Pobuda Třetí typ statistik, které oracle zaznamenává jsou data snímků. Snímkování je prováděno nástrojem active session history (ASH) sampler. Dalším užitečným nástrojem diagnostiky jsou výchozí body (baseline). Statistická baseline je kolekce statistik naměřených v době kdy systém pracuje dobře při špičce. Porovnáním se statistikami získanými během špatného výkonu systému zjistíme, jaké ze statistik se podstatně změnili a kde může být problém. Databázové statistiky Databázové statistiky poskytují informace o druhu zatížení databáze a interních a externích zdrojích využívaných databází. Nejdůležitější statistiky jsou: • Wait Events (čekání na událost) • Statistiky časového modelu • Historie aktivní relace (session) • Statistiky systému a relací (sessions) Wait Events Jsou to statistiky, které jsou získávány server procesy, k indikaci toho, že proces musí počkat na událost než může pokračovat ve zpracování. Informace z těchto statistik mohou odhalit symptomy problémů jako je blokované spojení, kolize bufferů a I/O kolize. Statistiky dle časového modelu Každá komponenta databáze Oracle má vlastní sadu statistik. Analyzovat tak systém jako celek vyžaduje mít společné měřítko. Tím je čas. Nejdůležitější statistikou je DB time (databázový čas). Tato statistika zaznamenává celkový čas strávený voláními databáze a je ukazatelem celkového zatížení instance. Je počítána součtem časů CPU a Wait Event časů všech aktivních relací. Historie aktivní relace Pohled V$ACTIVE_SESSION_HISTORY obsahuje snímky aktivity relace v instanci databáze. Aktivní relace jsou snímkovány každou sekundu a jsou ukládány do circular buffer v paměti SGA. Část snímků je uložena na disk nástrojem Automatic Workload Repository. Díky tomu lze porovnávat aktuální data z pohledu V$ACTIVE_SESSION_HISTORY a historická data z pohledu DBA_HIST_ACTIVE_SESS_HISTORY. Statistiky systému a relací Pro systém a relace je k dispozici velké množství kumulativních statistik. Všechny mohou být nalezeny v pohledech V$SYSSTAT a V$SESSTAT. Statistiky operačního systému Mezi tyto statistiky řadíme ty, které poskytují informace o využití a výkonu hlavních hardwarových komponent systému a operačního systému jako takového. Díky těmto informacím můžeme objevit přetížené komponenty v systému. Mezi statistiky operačního systému řadíme: • statistiky CPU • statistiky virtuální paměti • statistiky I/O operací disku • statistiky sítě - 24 - Ladění databázového systému Oracle Tomáš Pobuda Statistiky CPU Při ladění je využití procesoru nejdůležitější statistika operačního systému. Měli bychom zjišťovat využití procesoru pro celý systém a pro každou CPU ve víceprocesorových prostředích. Zpravidla se využití procesoru měří jako čas strávený v tzv. user mode (instrukce uživatelské aplikace) a kernel mode (instrukce jádra operačního systému). V prostředí kde jsou všechny procesory plně využity by měl Oracle běžet od 65% do 95% v user mode. Pohled V$OSSTAT obsahuje informace o vytížení hardware a pohled V$SYSMETRIC_HISTORY obsahuje hodinovou historii využití CPU. Statistiky virtuální paměti Používají se hlavně jako ověření, že prakticky nedochází ke stránkování či swapování (odkládání na disk) paměti. Pokud by k tomu docházelo, nepříznivě by to ovlivnilo výkon systému. Statistiky I/O operací disku Vzhledem k tomu, že jsou soubory databáze uloženy na discích, výkon I/O subsystému značně ovlivňuje výkon databáze. Nejdůležitějšími statistikami jsou aktuální doba odezvy a délka fronty na disku. Díky nim můžeme zjistit jestli disky pracují optimálně nebo jsou přetížené. Za normální dobu odezvy se považuje 5 až 20 milisekund. Pokud fronta na disku začne překračovat 2, je dobré prověřit jestli není disk potencionálním úzkým místem. Kromě těchto jsou sbírány ještě statistiky ve třech dimenzích pro jednotlivé a vícenásobné čtení bloku a operace zápisu: • uživatelské skupiny Pokud je aktivovaný Oracle Database Resource Manager, můžeme najít I/O statistiky pro všechny uživatelské skupiny v pohledu V$IOSTAT_CONSUMER_GROUP. Snímky jsou vytvářeny každou hodinu a ukládány jako historické statistiky v AWR. • soubory databáze I/O statistiky databázových souborů, na které byl přístup nalezneme v pohledu V$IOSTAT_FILE. • funkce databáze I/O statistiky databázových funkcí (jako jsou LGWR a DBWR) jsou v pohledu V$IOSTAT_FUNCTION. Statistiky sítě Síťové statistiky používáme podobně jako statistiky disků. K určení jestli síť nebo síťový interface není přetížený. V síťových aplikacích může být latence sítě velkou částí času odezvy uživatele. Statistiky můžeme nalézt v pohledu V$IOSTAT_NETWORK. Tab. 7 – Nástroje pro sběr statistik na operačním systému UNIX Komponenta CPU Paměť Disk Síť nástroj UNIX sar, vmstat, mpstat, iostat sar, vmstat sar, iostat netstat 3.4.2.1 Automatic Workload Repository (AWR) AWR je nástroj, který sbírá, zpracovává a zpravuje výkonnostní statistiky pro detekci problémů a samo-ladící účely. Tato data jsou uchovávána v paměti i v databázi (na disku). Nasbíraná data mohou být zobrazována v rámci reportů a pohledů (view). AWR sbírá a zpracovává tyto statistiky: • statistiky přístupů a využití databázových segmentů - 25 - Ladění databázového systému Oracle Tomáš Pobuda • statistiky dle časového modelu přístupné přes pohledy V$SYS_TIME_MODEL a V$SESS_TIME_MODEL • statistiky SQL příkazů, které vysoce zatěžují systém, založené na celkové době a čase CPU • statistiky ASH, reprezentující historii aktivity posledních relací. Sběr statistik pomocí AWR je implicitně zapnuto a je regulováno pomocí inicializačního parametru STATISTICS_LEVEL jehož nastavení může být: • BASIC – znemožní používat hodně nástrojů databáze Oracle včetně AWR a není doporučováno • TYPICAL – při tomto nastavení se sbírají všechny významné statistiky. Stačí pro většinu prostředí. Je to výchozí hodnota. • ALL – navíc se sbírají statistiky exekučních plánů a časové statistiky OS Popis AWR zde můžeme rozdělit na následující části: • Snímky (snapshots) • Výchozí body (baselines) • Spotřeba úložného prostoru (Space Consumption) Snímky Jsou to historická data z daných časových okamžiků, která jsou používána pro porovnání výkonu nástrojem ADDM. Při základním nastavení, databáze Oracle automaticky generuje snímky dat výkonu každou hodinu a uchovává statistiky v centrálním úložišti 8 dní. Data ze snímků jsou pak analyzována ADDM. Výchozí body Výchozí bod obsahuje data z daného časového intervalu, která jsou uchovávána za účelem porovnání s jinými podobnými časovými intervaly, kdy je podobné zatížení databáze, ale objevují se problémy s výkonem. Ve výchozím bodu jsou snímky, které nejsou AWR nikdy automaticky mazány. Výchozí body můžeme rozdělit na: • Stálé – odpovídá pevné časové době z minulosti • Pohyblivé – bere v úvahu všechna data z AWR • Šablony – dále se dělí na: o jednotlivé – používáme je když potřebujeme vytvořit výchozí bod v budoucnosti o opakované – používáme je když potřebujeme vytvořit výchozí bod v budoucnosti dle plánu. Spotřeba úložného prostoru Prostor potřebný pro uložení dat generovaných AWR je závislý na několika faktorech: • Počet aktivních relací v systému • Interval snímků • Doba uchování historických dat - 26 - Ladění databázového systému Oracle Tomáš Pobuda Při výchozím nastavení kdy jsou data snímána každou hodinu a uchovávána 8 dní a 10-ti aktivních relacích jsou nároky dat AWR na úložný prostor zhruba 200 až 300 MB. Zvětšením intervalu snímků a zkrácením doby uchovávání dat můžeme snížit spotřebu místa. Pokud to uděláme, může to poznamenat přesnost některých nástrojů závislých na datech AWR, jako jsou: • Automatic Database Diagnostic Monitor • SQL Tuning Advisor • Undo Advisor • Segment Advisor Doporučuje se nastavit takovou dobu uchování dat, aby byl uložen celý cyklus zátěže. Například pokud je během pracovního týdne systém zatížen běžnou prací uživatelů a o víkendu se prování dávkové operace, můžeme nechat nastavenu implicitní dobu 8 dní, protože bude uložena jak zátěž během pracovního týdne tak i rozdílná zátěž o víkendu. 3.4.2.2 Automatic Database Diagnostic Monitor (ADDM) Pokud se v systému objeví problém, je nezbytné přesně a včasně diagnostikovat problém než začneme dělat v systému změny. Statistická data pro diagnostiku problému jsou uložena v AWR a jsou využívána ADDM (automatic database diagnostic monitor). Ve většině případů by mělo být ADDM první místo kam se podívat, pokud nastane problém. ADDM poskytuje následující funkce: • Automatickou diagnostiku výkonu každou hodinu • Diagnostiku problému založenou na zkušenostech z ladění po desetiletí • Časová kvantifikace dopadů problémů a užitek z doporučení • Identifikace hlavních příčin, ne jen symptomů • Doporučení pro řešení problémů • Identifikace bezproblémových oblastí systému • Minimální zátěž systému během diagnostiky Je nutné si uvědomit, že ladění je iterativní proces a odstranění jednoho problému, může zapříčinit vznik jiného problému. Takže i s funkcemi, které poskytuje ADDM, může být ladění vícekolový proces ladění, než systém dosáhne požadovaného výkonu. Další popis ADDM můžeme rozdělit následovně: • ADDM analýza • Výsledky ADDM analýzy ADDM analýza Každá ADDM analýza může být provedena na páru AWR snímků, které definují časové období pro analýzu. ADDM analýza je prováděna vždy, když AWR vygeneruje snímek a výsledky jsou uloženy do databáze. Časové období analyzované ADDM je definováno posledními dvěma snímky (při základním nastavení je to 1 hodina). Manuálně lze spustit analýzu pro jakékoli dva snímky z AWR, které nebyly dosud smazány. Základním prostředím pro ADDM je Oracle Enterprise Manager. Zde je možné spravovat ADDM i zobrazovat výsledky analýz. ADDM analýza je prováděna tak, že se nejdříve identifikují symptomy a poté z nich hlavní příčiny problémů s výkonem. Cílem analýzy je snížit metriku DB time (databázový čas). Pro připomenutí, je to celkový čas strávený databází vykonáváním uživatelských požadavků. Obsahuje čekací čas a - 27 - Ladění databázového systému Oracle Tomáš Pobuda čas CPU aktivních uživatelských relací. Snížením DB time je databáze schopná obsloužit více uživatelů při použití stejných zdrojů, což zvyšuje propustnost. Problémy nalezené ADDM jsou seřazeny podle DB time, který spotřebovávají. Části systému, které spotřebovávají malou část DB time jsou udávané jako bezproblémové. Některé typy problémů, které ADDM zvažuje: • Vytíženost CPU – Je CPU zatěžováno Oraclem nebo jinou aplikací? • Nedostatečně velké paměťové struktury – Jsou paměťové struktury (SGA, PGA, buffer cache) nastaveny na dostatečnou velikost. • Otázky kapacity I/O – Pracuje I/O subsystém jak bylo předpokládáno? • Vysoce zatěžující SQL příkazy – Jsou zde SQL příkazy, které spotřebovávají velké množství systémových zdrojů? • Sub-optimální používání Oracle aplikací – Jsou zde problémy se špatnou správou spojení, nadměrné parsování nebo kolize zámků na aplikační úrovni. • Otázky konfigurace databáze – Je zde důkaz špatného nastavení velikosti log souborů, otázky archivace, nepřiměřené množství checkpointů nebo špatné nastavení parametrů? • Otázky současného přístupu – Jsou nějaké problémy s vytížeností bufferů? Výsledky ADDM analýzy Kromě diagnostiky problému, ADDM navíc doporučuje možná řešení. Výsledky ADDM analýzy jsou prezentovány jako sada nálezů. Nálezy mohou být rozděleny na typy: • Nálezy problémů popisují hlavní příčiny výkonového problému databáze. • Nálezy symptomů obsahují informace, které často vedou k jednomu či více nálezům problémů. • Informace relevantní pro pochopení dané oblasti výkonu databáze. • Upozornění obsahující informace o problémech které mohou ovlivnit úplnost a přesnost ADDM analýzy (např. chybějící data v AWR) Každý nález problému je kvantifikován jako odhad DB time, který spotřebovává. Nálezu mohou být přiřazena doporučení, která sníží dopad na výkonový problém. Jaké typy doporučení můžeme dostat? • Změna hardware – přidání CPU nebo změna konfigurace I/O subsystému • Konfigurace databáze – změna nastavení inicializačních parametrů • Změny schéma – rozdělení rozsáhlých datových tabulek do menších částí nebo použití automatické správy segmentů (ASSM – automatic segment-space management) • Změny aplikace – použití cache pro sekvence nebo používání vazebných proměnných • Využití jiných rádců – například SQL Tuning Advisor pro SQL zatěžující systém nebo Segment Advisor pro velké či hodně využívané objekty Seznam doporučení může obsahovat několik alternativ jak vyřešit daný problém. Takže není nutné aplikovat všechna doporučení, aby byl problém vyřešen. - 28 - Ladění databázového systému Oracle Tomáš Pobuda 3.4.3 Konfigurace paměti Oracle ukládá informace do paměti cashe a na disk. Přístup do cashe (RAM) je několikanásobně rychlejší (přístup do cashe je v řádech nanosekund a přístup na disk v řádech milisekund) než přístup na disk (fyzické I/O). Proto je výhodnější aby byly objekty, ke kterým se často přistupuje,v paměti cashe. Cílem ladění paměti je minimalizace přístupu na disk, jak je to jen možné. Lze toho docílit tím, že zvýšíme pravděpodobnost umístění požadovaných dat v cache nebo zefektivníme proces získávání dat. Oracle používá tyto paměti cache: • Shared pool • Large pool • Java pool • Buffer cache • Streams pool size • Log buffer • Privátní paměť procesů Automatic Memory Management Oracle doporučuje používání automatické správy paměti (automatic memory management). Automatická správa paměti umožní databázi spravovat a ladit paměť instance. Automatickou správu můžeme konfigurovat, tak že nastavíme parametry pro plánovanou velikost paměti (MEMORY_TARGET) a maximální plánovanou velikost paměti (MEMORY_MAX_TARGET). Databáze si pak paměť rozdělí mezi system global area (SGA) a program global area (PGA) tak jak potřebuje. Pokud potřebujeme konfigurovat rozvržení paměti je v Enterprise Manageru dostupný rádce Memory Advisor. Automatic Shared Memory Management Pokud si chceme zjednodušit nastavování SGA, můžeme použít Automatic shared memory management, nastavením inicializačního parametru SGA_TARGET na nenulovou hodnotu a parametru STATISTICS_LEVEL na TYPICAL nebo ALL. Nastavení parametru SGA_TARGET lze dynamicky měnit v Enterprise Manageru. Podmínkou je pouze aby parametr SGA_TARGET byl menší nebo roven parametru SGA_MAX_SIZE. Pro změnu velikosti parametru SGA_MAX_SIZE musíme restartovat databázi. Paměť přidělenou parametrem SGA_TARGET rozdělí automatická správa dle zátěže databáze na tyto paměťové prostory: • Database buffer cache (default pool) • Shared pool • Large pool • Java pool • Strems pool Pokud jsou pro tyto paměťové prostory nastavené parametry (DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE, STREAMS_POOL_SIZE) na nenulové hodnoty, pak je Automatic shared memory management bere jako minimální hodnoty, které může jednotlivým prostorům přiřadit. Následující paměťové prostory nejsou ovlivněny Automatic Shared Memory Management, ale jsou nastavovány manuálně: - 29 - Ladění databázového systému Oracle Tomáš Pobuda • Log buffer • jiné buffer cache (např. KEEP, RECYCLE) • Fixed SGA a jiné interní alokace Pro nastavení těchto prostorů jsou k dispozici následující parametry: DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE, DB_nK_CACHE_SIZE a LOG_BUFFER. Využití operační paměti systému Jelikož smysl SGA je ukládat data pro rychlý přístup, měla by být v operační paměti. Pokud by se data SGA swapovala (odkládala) na disk, pak už by nebyla rychle přístupná a negativně by to ovlivnilo výkon. Pokud tedy alokujeme velkou SGA paměť na systému, kde by pro ní nebylo místo v operační paměti, bude výhoda velké SGA převážena nevýhodou swapování na disk. Jestliže chceme, aby se za žádných okolností SGA neswapovala na disk, můžeme nastavit parametr LOCK_SGA na TRUE. Nevýhodou je, že pokud je nastaven parametr LOCK_SGA na TRUE, tak nelze použít parametry MEMORY_TARGET a MEMORY_MAX_TARGET. Když nastavujeme velikost SGA, musíme myslet také na individuální procesy serveru, operační systém nebo jiné programy běžící na serveru. Součet alokací paměti pro Oracle by měl být menší než množství operační paměti mínus paměť pro další aplikace a operační systém, aby nedocházelo ke swapování na disk. Tab. 8 – přehled módů správy paměti (Memory management) [ORA-DC] Memory Management Mód Pro Nastavujeme • Automatic memory management Automatic shared memory management (Automatic memory management deaktivován) SGA a PGA SGA • Celkovou velikost paměti pro instanci (Volitelně) Maximální velikost paměti pro instanci Oracle automaticky ladí • • • • Database Celkovou velikost SGA Velikosti SGA komponent Velikost PGA v instanci Individuální velikosti PGA • • velikosti SGA komponent SGA target size (Volitelně) maximální velikost SGA • • • • Shared pool size Buffer cache size Java pool size Large pool size Manual shared memory management (Automatic memory management and automatic shared memory management deaktivován) SGA Automatic PGA memory management PGA Velikost PGA target pro Individual PGA sizes instanci Manual PGA memory management (nedoporučuje se) PGA Maximální pracovní prostor velikost pro každý typ SQL operátoru - 3.4.3.1 Konfigurace buffer cache Pro hodně typů operací využívá Oracle buffer cache k ukládání bloků přečtených z disku. Takto uložené bloky jsou rychleji přístupné, než uložené na disku. - 30 - Ladění databázového systému Oracle Tomáš Pobuda Nastavení velikosti buffer cache Je skoro nemožné vědět, jak velkou nastavit buffer cache na nové instanci. Dá se postupovat, tak že odhadneme velikost buffer cache a poté spustíme na databázi reprezentativní vzorek zátěže. Po sběru a vyhodnocení statistik můžeme usoudit, že je cache poddimenzovaná nebo předimenzovaná. Informace pro rozhodnutí o velikosti buffer cache nám mohou též poskytnout: • V$DB_CACHE_ADVICE – pohled s odhady čtení z disku v závislosti na velikosti buffer cache (viz Tab. 9) • Buffer cache hit ratio – koeficient „zásahů“ do cache V$DB_CACHE_ADVICE Tento pohled můžeme aktivovat nastavením parametru DB_CACHE_ADVICE na ON. Nastavení lze měnit i za běhu databáze. Lze tak sbírat data pro specifickou zátěž. Při aktivaci pohledu nepatrně vzroste zatížení CPU, kvůli zápisu dat do pohledu. Sloupce, které nás z V$DB_CACHE_ADVICE zajímají: • size_for_estimate – velikost cache (v MB) • buffers_for_estimate – počet bufferů (db bloků) • estd_physical_read_factor – koeficient udávající procentní změnu fyzických čtení z disku • estd_physical_reads – odhadovaný počet fyzických čtení z disku SQL dotaz: SELECT size_for_estimate, buffers_for_estimate, estd_physical_read_factor, estd_physical_reads FROM V$DB_CACHE_ADVICE WHERE name = 'DEFAULT' AND block_size = (SELECT value FROM V$PARAMETER WHERE name ='db_block_size') AND advice_status = 'ON'; Tab. 9 – příklad V$DB_CACHE_ADVICE [ORA-PTG] Cache Buffers Estd Phys Read Factor Estd Phys Reads Size (MB) 30 60 91 121 152 182 212 243 273 304 334 364 395 424 456 486 517 547 577 608 3,802 7,604 11,406 15,208 19,010 22,812 26,614 30,416 34,218 38,020 41,822 45,624 49,426 53,228 57,030 60,832 64,634 68,436 72,238 76,040 18.70 12.83 7.38 4.97 3.64 2.50 1.74 1.33 1.13 1.00 .93 .87 .83 .79 .76 .74 .71 .69 .67 .66 192,317,943 131,949,536 75,865,861 51,111,658 37,460,786 25,668,196 17,850,847 13,720,149 11,583,180 10,282,475 9,515,878 8,909,026 8,495,039 8,116,496 7,824,764 7,563,180 7,311,729 7,104,280 6,895,122 6,739,731 - 31 - 10% z aktuální velikosti Aktuální velikost 200% z aktuální velikosti Ladění databázového systému Oracle Tomáš Pobuda V tabulce s ukázkou pohledu V$DB_CACHE_ADVICE vidíme,že aktuální velikost buffer cache je 304 MB. Pokud bychom snížily paměť třeba na 273 MB, pak se odhaduje, že čtení z disku se zvýší o 13% (1,13 estd. phys. read factor). Naopak při zvýšení velikosti cache na 334 MB se předpokládá, že se čtení z disku sníží o 7% (0.93 estd. phys. read factor). Vztah mezi velikostí cache a počtem čtení z disku není vždy hladká funkce. Když nastavujeme velikost buffer cache musíme myslet na to, že ne každé zvýšení velikosti buffer cache musí vést k předpokládanému snížení čtení z disku. Pokud se podíváme na obrázek Obr. 10, vidíme, že čtení z disku se při zvětšení buffer cache z A na B zmenší méně než při zvětšení buffer cache z B na C. Obr. 10 – Čtení z disku a velikost buffer cache [upravený: ORA-PTG] Buffer cache hit ratio Tento koeficient ukazuje jak často je požadovaný blok nalezen v buffer cache. Používá se k verifikaci odhadovaných čtení z disku. Vypočítáme ho z údajů v pohledu V$SYSSTAT (viz Tab. 10). K tomu Tab. 10 – statistiky pro výpočet hit ratio [zdroj: ORA-PTG] Statistika consistent gets from cache db block gets from cache physical reads cache Popis Počet požadavků na čtení shodného bloku z buffer cache. Počet požadavků na blok z buffer cache. Počet bloků načtených do buffer cache z disku Buffer cache hit ratio spočítáme podle vzorce: 1 - (('physical reads cache') / ('consistent gets from cache' + 'db block gets from cache') Když je koeficient buffer cache hit ratio nízký, měla by být buffer cache zvětšena. Je však nutné zvážit další okolnosti, které mohou nízký koeficient způsobovat. Koeficient buffer cache hit ratio může být nízký například pokud aplikace generuje dotazy, při nichž se prohledávají všechny řádky velkých tabulek (full table scan). Bloky, které jsou čteny při prohledávání řádků velkých tabulek, jsou vloženy na konec LRU (least recently used – v poslední době nejméně používané) seznamu a ne na začátek. Tudíž jsou tyto bloky smazány dříve než bloky čtené při small table scanech nebo indexovém vyhledávání. Dalším faktorem ovlivňujícím buffer cache ratio je stavba aplikace. Pokud - 32 - Ladění databázového systému Oracle Tomáš Pobuda se provádí operace, které nevyužívají cache, zvětšení buffer cache nebude mít žádný dopad na výkon. Více bufferů Většinou stačí pokud je nastaven DEFAULT buffer prostor. Ale může být výhodné nastavit více prostorů bufferu. Když je objekt asociován s cache, všechny bloky tohoto objektu jsou umístěny do cache. Pokud není cache dostatečně velká pro uložení všech alokovaných segmentů, jsou mazány nejstarší bloky v cache. Při náhodném čtení velmi velkých segmentů (více než 10% velikosti buffer cache), mohou tyto vytlačovat menší segmenty z cache. Velké segmenty pak zabírají velkou část cache, ale vzhledem k malé četnosti jejich čtení není umístění v cache přínosem. Segmenty, do kterých je přistupováno atypicky, je dobré ukládat do speciálních prostorů bufferu: • KEEP – pro malé, často DB_KEEP_CACHE_SIZE. • RECYCLE – pro velké, málo DB_RECYCLE_CACHE_SIZE. čtené čtené segmenty. segmenty. Nastavuje Nastavuje se parametrem se parametrem 3.4.3.2 Konfigurace shared pool Shared pool je místo v paměti, které dále dělíme na library cache, dictionary cache a result cache. V library cache se ukládají nedávno vykonané SQL a PL/SQL příkazy ve spustitelné formě (parsované a zkompilované). Dictionary cache uchovává nedávno čtená data z data dictionary (informace o tabulkách, indexech, atd.). A v result cache se uchovávají výsledky dotazů (SQL) a funkcí PL/SQL. Nastavení velikosti shared pool není, stejně jako u buffer cache, jednoduché. Na nové instanci lze odhadnout velikost shared pool a poté spustit reprezentativní vzorek zátěže na databázi. Po prozkoumání relevantních statistik můžeme říci jestli je velikost shared pool dostatečná nebo je příliš malá. Pohled V$SHARED_POOL_ADVICE obsahuje podpůrné informace pro rozhodnutí o velikosti shared pool jako je odhadovaný čas parsování při různých velikostech shared pool. Cílem je nastavit takovou velikost shared pool, kdy všechny často používané SQL dotazy jsou v cache při minimální alokaci paměti. Pokud není vykonávaný SQL dotaz v paměti, pak se jedná o tzv. hard parse (SQL příkaz se parsuje). Pokud však v paměti je, jedná se o tzv. soft parse (SQL příkaz se čte z paměti ve spustitelné formě). Statistiky library cache Statistika, která ukazuje množství překladů (parsování) SQL příkazů dříve načtených do cache, je ve sloupci RELOADS pohledu V$LIBRARYCACHE. Pokud se tato hodnota blíží nule, je nastavena správná velikost shared pool. Ve sloupci INVALIDATIONS stejného pohledu je statistika ukazující kolikrát byla data v library cache zneplatněna (např. v důsledku DDL operace) a musela být znovu parsována. Tato statistika by se měla také blížit nule, pokud je systém dobře nastaven. Podílem součtů hodnot ve sloupcích PINS (počet požadavků na objekt z library cache) a PINHITS (kolikrát byl požadavek na objekt library cache nalezen v paměti) vypočítáme statistiku library cache hit ratio: Library cache hit ratio = sum(pinhits) / sum(pins). - 33 - Ladění databázového systému Oracle Tomáš Pobuda Tab. 11 – Příklad výstupu z pohledu V$LIBRARYCACHE [zdroj: ORA-PTG] NAMESPACE BODY CLUSTER INDEX OBJECT PIPE SQL AREA TABLE/PROCEDURE PINS 8870 393 380 29 0 55265 21536413 10775684 PINHITS 8819 0 0 0 55263 21520516 10774401 RELOADS 0 0 0 0 0 11204 0 INVALIDATIONS 0 0 0 0 2 0 Další důležitá statistika je velikost volné paměti (najdeme v pohledu V$SGASTAT) při zátěži ve špičce. Optimálně by měla být co nejmenší, ale tak velká aby nedocházelo k opětovnému překladu (RELOADS). Statistiky dictionary cache Pokud je dobře nastavena velikost shared pool pro library cache, pak je z pravidla dobře nastavena i pro dictionary cache. Efektivita dictionary cache pro každý typ z data dictionary je dostupná z pohledu V$ROWCACHE dotazem: SELECT parameter , sum(gets) , sum(getmisses) , 100*sum(gets - getmisses) / sum(gets) pct_succ_gets , sum(modifications) updates FROM V$ROWCACHE WHERE gets > 0 GROUP BY parameter; Vysvětlení důležitých sloupců a příklad výstupu tohoto dotazu jsou v následujících tabulkách. Tab. 12 – Důležité sloupce pohledu V$ROWCACHE Sloupec PARAMETER GETS GETMISSES MODIFICATIONS Popis Jméno položky data dictionary (prefix dc_) Počet požadavků na informace o položce data dictionary Počet požadavků, které nebyli načteny z cache. Počet aktualizací dat v dictionary cache. - 34 - Ladění databázového systému Oracle Tomáš Pobuda Tab. 13 – Příklad výstupu pohledu V$ROWCACHE [zdroj: ORA-PTG] PARAMETER dc_database_links dc_free_extents dc_global_oids dc_histogram_defs dc_object_ids dc_objects dc_profiles dc_rollback_segments dc_segments dc_sequence_grants dc_sequences dc_synonyms dc_tablespace_quotas dc_tablespaces dc_used_extents dc_user_grants dc_usernames dc_users SUM (GETS) 81 44876 42 9419 29854 33600 19001 47244 100467 119 26973 6617 120 581248 51418 76082 216860 376895 SUM (GETMISSES) 1 20301 9 651 239 590 1 16 19042 16 16 168 7 10 20249 18 12 22 PCT_SUCC_GET S 98.8 54.8 78.6 93.1 99.2 98.2 100.0 100.0 81.0 86.6 99.9 97.5 94.2 100.0 60.6 100.0 100.0 100.0 UPDATES 0 40,453 0 0 52 53 0 19 40,272 0 26,811 0 51 0 42,811 0 0 0 Celkové cache hit ratio lze získat dotazem: SELECT (SUM(GETS - GETMISSES - FIXED)) / SUM(GETS) "ROW CACHE" FROM V$ROWCACHE; Statistiky result cache K prohlížení statistik můžeme využít buď pohledů (viz Tab. 14) nebo balíčku PL/SQL DBMS_RESULT_CACHE. Tento balíček umožňuje nejen získávat statistiky o result cache, ale vykonávat i operace jako je například vyprázdnění paměti cache (flush). Tímto příkazem získáme přehled alokací paměti: SQL> set serveroutput on SQL> execute dbms_result_cache.memory_report Tab. 14 – Pohledy pro result cache Pohled V$_RESULT_CACHE_STATISTICS V$RESULT_CACHE_MEMORY Popis Statistiky o nastavení cache a využití paměti (viz Tab. 15) Seznam všech paměťových bloků a jejich statistik. Příkazem SQL získáme tabulku s daty(viz Tab. 15): column name format a20 select name, value from v$result_cache_statistics; - 35 - Ladění databázového systému Oracle Tomáš Pobuda Tab. 15 – Příklad výstupu pohledu V$_RESULT_CACHE_STATISTICS [zdroj: ORA-PTG] NAME Block Size (Bytes) Block Count Maximum Block Count Current Result Size Maximum (Blocks) Create Count Success Create Count Failure Find Count Invalidation Count Delete Count Invalid Delete Count Valid VALUE 1024 3136 32 156 2 0 0 0 0 0 Systém, který dobře používá result cache pro SQL příkazy by měl vykazovat malé hodnoty Create Count Failure a Delete Count Valid a relativně velké hodnoty Find Count. 3.4.3.3 Large pool Large pool nemá na rozdíl od shared pool LRU list. To znamená, že objekty z large pool nejsou mazány na základě jejich stáří. Konfigurovat large pool má smysl pokud naše databáze používá: • Parallel query • Recovery Manager • Share server Této oblasti se nebudeme více věnovat, protože nebude využívána v praktické části práce. 3.4.3.4 Konfigurace Redo log buffer Server procesy, které dělají změny do data bloků v buffer cache, generují redo data do log bufferu. LGWR (log writer) začíná zapisovat data z redo log bufferu do online redo logů pokud: • log buffer je zaplněn z jedné třetiny • LGWR je informován server procesem o COMMIT nebo ROLLBACK • DBWR (database writer) informuje LGWR, že má zapsat data z bufferu Jakmile jsou zapsána data z redo log bufferu do redo log souboru na disk, je možné přepsat tato data v paměti novými záznamy. LGWR zapisuje tak rychle, aby zajistil, že bude v bufferu dost místa pro nové záznamy i při velké zátěži. Čím je buffer větší, tím je větší šance, že zde bude místo pro nové záznamy. Také to dává čas log writeru efektivně zapisovat redo záznamy. Malý log buffer na systému, kde probíhá hodně UPDATE operací, může zapříčinit nepřetržité zapisování z bufferu na disk. To by znamenalo velkou degradaci výkonu. Velikost redo log bufferu určuje inicializační parametr LOG_BUFFER (udáván v bajtech). Lze ho nastavit před startem instance, poté už nemůže být modifikován. - 36 - Ladění databázového systému Oracle Tomáš Pobuda Obr. 11 – Redo log buffer [zdroj: ORA-PTG] Nastavení velikosti redo log buffer Redo log buffer je malou částí SGA v porovnání s celkovou velikostí SGA. Jeho dobré nastavení však může významně ovlivnit výkon na systémech kde probíhá hodně UPDATE operací. Jako rozumný odhad velikosti bufferu se bere: MAX (0,5 MB, (128 KB * počet cpu) Na většině systémů nemá smysl nastavovat velikost redo log bufferu větší než 1 MB. Na druhou stranu nemá zvětšování velikosti bufferu negativní dopad na výkon. Pouze je plýtváno s pamětí. Statistiky redo log buffer Statistika REDO LOG BUFFER ALLOCATION RETRIES odráží počet čekání uživatelských procesů na místo v redo log bufferu. Tuto statistiku můžeme najít v dynamickém pohledu V$SYSSTAT příkazem: SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME = 'redo buffer allocation retries'; Měla by se pohybovat okolo nuly. Pokud by se zvyšovala, pak by to znamenalo, že procesy musí čekat na místo a tudíž je velikost redo log bufferu malá (jinou příčinou může být velký počet checkpointů). 3.4.3.5 Správa PGA paměti Program global area (PGA) je privátní paměť server procesů. Přístup do ní mají pouze server procesy. Data v této paměti jsou například runtime oblasti kurzorů. Při vykonávání komplikovaných dotazů je přiřazena velká část runtime oblasti pracovním oblastem. Ty jsou alokovány operátory, které potřebují hodně paměti: • Třídící operátory (ORDER BY, GROUP BY, ROLLUP) • Hash-join • Slučování bitmap • Vytváření bitmap • Write buffery používané při importu velkého množství dat - 37 - Ladění databázového systému Oracle Tomáš Pobuda Třídící operátor používá pracovní oblast (třídící oblast) pro řazení řádků přímo v paměti. Podobně, hash-join operátor používá pracovní oblast (hash oblast) k vytvoření hash tabulky z jejího levého vstupu. Velikost pracovní oblasti může být kontrolována a laděna. Obecně větší pracovní oblast znamená zvýšení výkonu jednotlivého operátoru za cenu vyšší spotřeby paměti. Ideálně je pracovní oblast dost velká pro uložení vstupních dat a pomocných paměťových struktur alokovaných asociovaným SQL operátorem (optimální velikost pracovní oblasti). Pokud je velikost pracovní oblasti menší než optimální, zvýší se odezva, jelikož je proveden extra průchod částí vstupních dat (jednoprůchodová velikost pracovní oblasti). Když je velikost pracovní oblasti tak malá, že musí být prováděno více průchodů vstupními daty, nazýváme tuto situaci víceprůchodová velikost pracovní oblasti. Pokud například potřebuje třídící operace 10 GB ke třídění, bude potřeba o trochu více než 10 GB, aby mohla být provedena optimálně a nejméně 40 MB aby mohla být provedena jednoprůchodově. Při pracovní oblasti menší než 40 MB, bude muset být operace provedena víceprůchodově. Cílem je aby většina pracovních oblastí běžela optimálně, a pouze malé množství (například méně než 10%) jednoprůchodově. Měli bychom se vyhnout víceprůchodovému provádění. Jak je zřejmé z příkladu, tak i při třídění velkého množství dat je potřeba relativně malá třídící oblast pro jednoprůchodové provedení. Nastavení automatické správy PGA paměti Jestliže máme nastavenu automatickou správu paměti PGA, nastavení velikosti pracovních oblastí je automatické a _AREA_SIZE (SORT_AREA_SIZE, HASH_AREA_SIZE, BITMAP_MERGE_AREA_SIZE and CREATE_BITMAP_AREA_SIZE) parametry jsou ignorovány. Velikost PGA paměti dostupné pro pracovní oblasti je automaticky odvozena od inicializačního parametru PGA_AGGREGATE_TARGET. Je to velikost nastavená v PGA_AGGREGATE_TARGET mínus paměť alokovaná jinými komponentami systému (například PGA paměť alokovaná relaci). Zbývající paměť je pak rozdělována pracovním oblastem podle jejich paměťových požadavků. Při konfiguraci nové instance databáze je těžké odhadnout PGA_AGGREGATE_TARGET. Lze postupovat v těchto krocích: jak nastavit parametr • Uděláme úvodní odhad pro PGA_AGGREGATE_TARGET. Standardně Oracle používá velikost 20 % SGA, což je dostačující prvotní nastavení pro OLTP systémy. • Necháme proběhnout representativní zátěž a monitorujeme výkon (sledujeme statistiky PGA) • Ladíme parametr PGA_AGGREGATE_TARGET za použití informací ze statistik Monitorování výkonu automatické správy PGA paměti Před tím než začneme ladit velikost PGA paměti, měli bychom prozkoumat statistiky. Pro tyto účely jsou vhodné dynamické pohledy: • V$PGASTAT • V$PROCESS • V$SQL_WORKAREA_HISTOGRAM V$PGASTAT Tento pohled obsahuje informace o využití paměti PGA na úrovni instance databáze. Výstup z tohoto pohledu může vypadat například jako v tabulce Tab. 16. - 38 - Ladění databázového systému Oracle Tomáš Pobuda Tab. 16 – V$PGASTAT příklad výstupu [ORA-PTG] NAME aggregate PGA target parameter aggregate PGA auto target global memory bound total PGA inuse total PGA allocated maximum PGA allocated total freeable PGA memory PGA memory freed back to OS total PGA used for auto workareas maximum PGA used for auto workareas total PGA used for manual workareas maximum PGA used for manual workareas over allocation count bytes processed extra bytes read/written cache hit percentage VALUE 41156608 21823488 2057216 16899072 35014656 136795136 524288 1713242112 0 2383872 0 8470528 291 2124600320 39949312 98.15 UNIT bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes percent Popis důležitých řádků z pohledu V$PGASTAT: – současná hodnota inicializačního parametru • aggregate PGA target parameter PGA_AGGREGATE_TARGET. • aggregate PGA auto target – velikost PGA paměti, kterou může Oracle použít pro pracovní prostory běžící v automatickém módu. Pokud je tato hodnota malá v porovnání s hodnotou PGA_AGGREGATE_TARGET, pak je hodně paměti použito pro jiné komponenty systému (např. PL/SQL nebo Java memory) a zbývá jí málo pro třídící pracovní prostory. • global memory bound – hodnota maximální velikosti pracovní oblasti běžící v AUTO módu. Tato hodnota by neměla klesnout pod jeden megabyte. • total PGA allocated – aktuální množství PGA paměti alokované instancí. Oracle se snaží toto číslo udržet menší než hodnotu PGA_AGGREGATE_TARGET. Při velké zátěži však může o pár procent přesáhnout tuto hodnotu. • total freeable PGA memory – kolik může být uvolněno PGA paměti • total PGA used for auto workareas – kolik paměti PGA je právě používáno pracovními prostory běžícími v módu automatické správy. • over allocation count – kumulativní statistika překročení alokace paměti nad hodnotu PGA_AGGREGATE_TARGET. Pokud je alokace překračována, pak by měla být navýšena paměť dle informací z pohledu V$ PGA_TARGET_ADVICE. • total bytes processed (BP) – počet bajtů zpracovaných SQL operátory intenzivně využívající paměť. Je používána k vypočítání metriky cache hit percentage. • extra bytes read/written (EBP) – bajty zpracovávané při extra průchodech vstupních dat. Je používáno k výpočtu metriky cache hit percentage • cashe hit percentage – vypočítaná metrika odrážející výkon PGA paměti. Je vypočítaná dle vzorce: BP x 100 / (BP+EBP) V$PROCESS Tento pohled obsahuje informace o všech procesech připojených k databázi. Výstup pohledu může vypadat například jako v Tab. 17. - 39 - Ladění databázového systému Oracle Tomáš Pobuda Tab. 17 – Příklad výstupu pohledu V$PROCESS [ORA-PTG] PSEUDO oracle@dlsun1690 (PMON) oracle@dlsun1690 (MMAN) oracle@dlsun1690 (DBW0) oracle@dlsun1690 (LGWR) oracle@dlsun1690 (CKPT) oracle@dlsun1690 (SMON) oracle@dlsun1690 (RECO) oracle@dlsun1690 (q001) oracle@dlsun1690 (QMNC) oracle@dlsun1690 (MMON) oracle@dlsun1690 (MMNL) oracle@dlsun1690 (q000) oracle@dlsun1690 (TNS V1-V3) oracle@dlsun1690 (CJQ0) oracle@dlsun1690 (TNS V1-V3) PGA_USED_MEM 0 314540 313992 696720 10835108 352716 541508 323688 233508 314332 885756 315068 330872 635768 533476 430648 PGA_ALLOC_MEM 0 685860 685860 1063112 22967940 710376 948004 685860 585128 685860 1996548 685860 716200 928024 1013540 812108 PGA_FREEABLE_MEM 0 0 0 0 0 0 0 0 0 0 393216 0 65536 0 0 0 PGA_MAX_MEM 0 685860 685860 1063112 22967940 710376 1603364 816932 585128 685860 1996548 685860 716200 1255704 1144612 812108 Popis sloupců pohledu V$PROCESS: • PGA_USED_MEM – použitá paměť PGA • PGA_ALLOC_MEM – alokovaná paměť PGA • PGA_FREEABLE_MEM – uvolnitelný paměť PGA • PGA_MAX_MEM – maximální paměť PGA V$SQL_WORKAREA_HISTOGRAM Tento pohled ukazuje počet provedených pracovních oblastí optimálně, jednoprůchodově a víceprůchodově od startu databáze. Pracovní oblasti jsou rozděleny do skupin. Každá skupina je definována dolní a horní mezí velikosti pracovní oblasti (LOW_OPTIMAL_SIZE a HIGH_OPTIMAL_SIZE). Tabulku zobrazíme dotazem: SELECT LOW_OPTIMAL_SIZE/1024 low_kb, (HIGH_OPTIMAL_SIZE+1)/1024 high_kb, OPTIMAL_EXECUTIONS, ONEPASS_EXECUTIONS, MULTIPASSES_EXECUTIONS FROM V$SQL_WORKAREA_HISTOGRAM WHERE TOTAL_EXECUTIONS != 0; Výsledek dotazu může vypadat jako v Tab. 18. Tab. 18 - Výsledek dotazu na pohled V$SQL_WORKAREA_HISTOGRAM [ORA-PTG] LOW_KB HIGH_KB 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 OPTIMAL_EXECUTIONS ONEPASS_EXECUTIONS 156255 150 89 13 60 8 657 551 538 243 137 45 0 0 0 0 0 0 0 0 0 0 0 16 26 28 35 107 153 73 44 22 - 40 - MULTIPASSES_EXECUTIONS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Ladění databázového systému Oracle Tomáš Pobuda Jiným dotazem na pohled V$SQL_WORKAREA_HISTOGRAM můžeme získat procentuální vyjádření podílu optimálních, jednoprůchodových a víceprůchodových provedení. V našem příkladu je ještě podmínka aby byla spodní hranice (low_optimal_size) větší než 64 KB. SELECT optimal_count, round(optimal_count*100/total, 2) optimal_perc, onepass_count, round(onepass_count*100/total, 2) onepass_perc, multipass_count, round(multipass_count*100/total, 2) multipass_perc FROM (SELECT decode(sum(total_executions), 0, 1, sum(total_executions)) total, sum(OPTIMAL_EXECUTIONS) optimal_count, sum(ONEPASS_EXECUTIONS) onepass_count, sum(MULTIPASSES_EXECUTIONS) multipass_count FROM v$sql_workarea_histogram WHERE low_optimal_size > 64*1024); Výsledek tohoto dotazu může vypadat například jako v Tab. 19: Tab. 19 - Procentuální zobrazení pohledu V$SQL_WORKAREA_HISTOGRAM OPTIMAL_COUNT OPTIMAL_PERC ONEPASS_COUNT ONEPASS_PERC MULTIPASS_COUNT MULTIPASS_PERC 2239 81.63 504 18.37 0 0 Ladění PGA_AGREGATE_TARGET Databázový systém Oracle nám pomáhá s nastavením parametru PGA_AGGREGATE_TARGET dvěma pohledy: • V$PGA_TARGET_ADVICE • V$PGA_TARGET_ADVICE_HISTOGRAM Prozkoumáním těchto dvou pohledů, získáme dostatek informací pro rozhodnutí o hodnotě PGA_AGGREGATE_TARGET. V obou pohledech najdeme predikci statistik při měnící se hodnotě parametru PGA_AGGREGATE_TARGET. Pohledy se automaticky generují pokud jsou nastaveny parametry: • PGA_AGREGATE_TARGET – pro aktivaci automatické správy PGA paměti. • STATISTICS_LEVEL – nastaven na TYPICAL nebo ALL. Je potřeba upozornit na to,že hodnoty vypočítané simulací v těchto pohledech nemusí odpovídat realitě. Po tom co nastavíme parametr PGA_AGGREGATE_TARGET, bychom měli ověřit jestli výkon odpovídá očekáváním. V$PGA_TARGET_ADVICE Tento pohledu jsou vypočítávány statistiky cache hit percentage (procento „zásahu“ do cache) a overallocation count (počet alokací nad nastavení velikosti PGA paměti) v závislosti na velikosti parametru PGA_AGREGATE_TARGET. Typický dotaz na tento pohled vypadá takto: SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb, ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc, ESTD_OVERALLOC_COUNT FROM V$PGA_TARGET_ADVICE; Výsledek tohoto dotazu může vypadat například jako v Tab. 20: - 41 - Ladění databázového systému Oracle Tomáš Pobuda Tab. 20 - Příklad výsledku dotazu na pohled V$PGA_TARGET_ADVICE TARGET_MB 63 125 250 375 500 600 700 800 900 1000 1500 2000 3000 4000 CACHE_HIT_PERC 23 24 30 39 58 59 59 60 60 61 67 76 83 85 ESTD_OVERALLOC_COUNT 367 30 3 0 0 0 0 0 0 0 0 0 0 0 V$PGA_TARGET_ADVICE_HISTOGRAM Tento pohled počítá odhadované hodnoty statistik z pohledu V$SQL_WORKAREA_HISTOGRAM pokud měníme parametr PGA_AGREGATE_TARGET. Příklad dotazu na tento pohled je uveden níže a odpovídá situaci kdybychom zvýšili parametr PGA_AGGREGATE_TARGET dvojnásobně oproti stávající hodnotě. SELECT LOW_OPTIMAL_SIZE/1024 low_kb, (HIGH_OPTIMAL_SIZE+1)/1024 high_kb, estd_optimal_executions estd_opt_cnt, estd_onepass_executions estd_onepass_cnt, estd_multipasses_executions estd_mpass_cnt FROM v$pga_target_advice_histogram WHERE pga_target_factor = 2 AND estd_total_executions != 0 ORDER BY 1; Výsledek dotazu může vypadat například jako v Tab. 21. Tab. 21 - Příklad výsledku dotazu na pohled V$PGA_TARGET_ADVICE_HISTOGRAM LOW_KB HIGH_KB ESTD_OPTIMAL_CNT ESTD_ONEPASS_CNT ESTD_MPASS_CNT 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 156107 148 89 13 58 10 653 530 509 227 176 133 66 15 0 0 0 0 0 0 0 0 0 0 0 0 0 16 103 47 48 23 - 42 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Ladění databázového systému Oracle Tomáš Pobuda 3.4.4 Kalibrace a konfigurace I/O Výkon většiny aplikací je ovlivněn čtením/zápisem (I/O) na disk. Pokud pak taková aplikace stráví většinu času tím, že CPU čeká na I/O operace disku, pak můžeme říci, že hlavním omezením pro ni je disk. Databázový systém Oracle je navrhnut tak, aby nebyl limitován I/O (viz kap. 3.4.3). Ladění I/O pak může zlepšit výkon aplikace, jestliže nejsou požadavky na I/O vyřizovány v přijatelném čase. Pokud je však limitujícím faktorem například CPU, pak konfigurací I/O výkon nezlepšíme. 3.4.4.1 Kalibrace I/O Databázový systém Oracle umožňuje použít kalibraci I/O, abychom změřili výkon úložného subsystému. Pomůže nám určit jestli jsou problémy s výkonem zapříčiněny databází nebo úložným subsystémem. Dále popíšeme jaké jsou nezbytné předpoklady před spuštěním kalibrace a následně i spuštění kalibrace. Předpoklady před spuštěním kalibrace I/O: • uživatel musí mít přidělené právo SYSDBA • parametr timed_statistics musí být nastaven na TRUE • Musí být povoleno asynchronní I/O (nastavíme parametr filesystemio_options na SETALL) • zajistíme povolení asynchronního I/O pro datové soubory spuštěním tohoto příkazu: col name format a50 select name,asynch_io from v$datafile f,v$iostat_file i where f.file#=i.file_no and filetype_name='Data File'; Doporučuje se spouštět pouze jednu kalibraci v jeden okamžik. Jinak by byly výsledky zkresleny. Spuštění kalibrace I/O Kalibraci I/O se spouštíme procedurou DBMS_RESOURCE_MANAGER.CALIBRATE_IO. Tato procedura vytvoří zátěž intenzivním čtením z disku, aby určila maximum IOPS (I/O requests per second – I/O požadavky za sekundu) a maximum MBPS (megabytes of I/O per second – megabajty I/O za sekundu). Díky zátěži, která je kalibrací generována, by měla být kalibrace prováděna mimo špičky, když není databáze používána (například přes noc). Kalibraci spustíme příkazem: SET SERVEROUTPUT ON DECLARE lat INTEGER; iops INTEGER; mbps INTEGER; BEGIN -- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (<DISKS>, <MAX_LATENCY>, iops, mbps, lat); DBMS_RESOURCE_MANAGER.CALIBRATE_IO (2, 10, iops, mbps, lat); DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops); DBMS_OUTPUT.PUT_LINE ('latency = ' || lat); dbms_output.put_line('max_mbps = ' || mbps); end; Kdykoli v průběhu kalibrace můžeme zjistit její stav dotazem na pohled V$IO_CALIBRATION_STATUS. Potom co je kalibrace úspěšně dokončena, je možné si zobrazit výsledky z tabulky DBA_RSRC_IO_CALIBRATE. - 43 - Ladění databázového systému Oracle Tomáš Pobuda 3.4.4.2 Konfigurace I/O V této kapitole jsou popsány některá základní nastavení, která bychom neměli opomenout, při konfiguraci I/O. Doporučuje se zachovat konfiguraci tak jednoduchou jak je to jen možné, při zachování dostupnosti, obnovitelnosti a výkonu. Čím více je konfigurace složitá, tím je těžší jí spravovat, udržovat a ladit. Ruční rozmístění I/O Pokud nemáme k dispozici LVM nebo RAID (viz Terminologický slovník) pak musíme I/O mezi dostupné disky rozdělit ručně. Postup rozmístění souborů: 1. Zjistit požadavky na velikost souborů 2. Identifikovat očekávané zatížení I/O pro každý soubor. Určit, které soubory mají nejvyšší míru I/O a které jsou nevytížené. 3. Rozmístit soubory na disky tak aby byla míra I/O u všech soborů přibližně stejná. Kdy rozdělit soubory Pokud systém I/O není schopen zabezpečit míru I/O, která je potřebná, tak bez ohledu na to jestli používáme LVM, RAID či manuální rozmístění souborů, musíme oddělit soubory s vysokou mírou I/O od ostatních. Před tím než rozmístíme soubory, bychom měli ověřit, jestli je omezujícím faktorem opravdu I/O. Jak rozdělit soubory dle typů: • Tabulky, indexy a TEMP tablespacy Když patří sobory s vysokou mírou I/O tablespacům, které obsahují tabulky a indexy, potom zjišťujeme jestli není možné I/O těchto souborů snížit laděním SQL nebo aplikace. Když patří sobory s vysokou mírou I/O tablespacu TEMP, potom zkoumáme zda nelze ladit SQL příkazy provádějící řazení na discích, aby k takovému řazení nedocházelo. Pokud jsme již vyladily SQL příkazy, aby nedocházelo ke zbytečným I/O, a výkon I/O nepokrývá požadavky, potom zvažujeme oddělení souborů s velkou mírou I/O. • Redo log soubory Pokud mají redo log soubory vysokou míru I/O, potom zvažujeme jejich oddělení od ostatních souborů. Možné varianty jsou: o Umístit všechny redo logy na jeden disk bez ostatních souborů. o Umístit každou redo log skupinu na samostatný disk, na kterém nejsou uloženy jiné soubory o Data striping redo logů na několik disků (měli bychom se vyhnout umístění redo logů na RAID 5) Redo log soubory jsou zapisovány sekvenčně procesem Log Writer (LGWR). Tato operace může být provedena rychleji, pokud na disk současně nepřistupuje více procesů. Umístěním redo logů na vyhrazený disk obvykle zajistí hladký chod LGWR a není nutné další ladění. • Archivní logy Pokud je proces archiver (ARCH) pomalý, je rozumné zamezit soupeření procesů ARCH a LGWR o I/O. To zajistíme tak, že čtení redo logů archiverem a zápis redo logů LGWR bude oddělené. Představme si, že máme systém s čtyřmi redo log skupinami po dvou členech (1a, 1b, 2a, 2b, 3a, 3b, 4a, 4b). Abychom oddělili diskové operace (čtení, zápis) budeme potřebovat nejméně čtyři disky pro redo logy a jeden pro archivní logy (viz Obr. 12). - 44 - Ladění databázového systému Oracle Tomáš Pobuda Obr. 12 - Rozdělení Redo logů na discích [ORA-PTG] V okamžiku kdy LGWR switchne ze skupiny 1 na skupinu 2 může archiver číst skupinu 1 redo logů a zapsat jí do archivního logu. Jak je vidět, procesy nepřistupují současně na jeden disk. Operace čtení a zápisu tak mohou proběhnout rychleji. Velikost datového bloku Velikost bloku 8 KB je optimální pro většinu systémů. Nicméně OLTP systémy občas používají menší velikost datového bloku a DSS systémy zase větší. Popíšeme úvahy, které bychom měli zvážit. Jejich souhrn je uveden v Tab. 22. Čtení Bez ohledu na velikost dat je cílem minimalizovat počet čtení potřebných k získání požadovaných dat. • Pokud jsou řádky malé a přístup je převážně náhodný, pak vybereme menší velikost bloku. • Pokud jsou řádky malé a přístup je převážně sekvenční, potom vybereme větší velikost bloku. • Pokud jsou řádky malé a přístup je náhodný i sekvenční, potom by mohla být efektivnější větší velikost bloku. • Pokud jsou řádky velké, například záznamy obsahující data velkých objektů (LOB), potom vybereme větší velikost bloku Zápis Pro všechny systémy zpracovávající velké množství transakcí je 8 KB nejlepším kompromisem a většinou efektivním. Pouze systémy pracující velkými objekty (LOB) potřebují velikost bloku více než 8 KB. - 45 - Ladění databázového systému Oracle Tomáš Pobuda Tab. 22 – Výhody a nevýhody velikosti bloku Velikost bloku Menší Větší Výhody Dobré pro malé řádky s náhodným přístupem. Redukuje současný přístup k bloku. Má menší režii úložného prostoru. Dovoluje číst jedním I/O velké množství řádků do buffer cache. Dobrá při sekvenčním čtení velmi velkých řádků (jako jsou LOB data) Nevýhody Má relativně velkou režii úložného prostoru (hlavičky bloků). Nedoporučuje se pro velké řádky. Pokud je náhodně přistupováno k malým řádkům, plýtvá místem v buffer cache. Například s 8 KB blokem a 50 B řádkem, plýtváme 7950 B paměti v buffer cache, pokud je prováděn náhodný přístup. Není dobré pro bloky s indexy v OLTP prostředí, jelikož se zvyšuje konkurenční přístup k blokům. 3.5 Ladění SQL příkazů Ladění SQL příkazů se dá rozdělit na několik kroků. Stejně jako většina ladících postupů je to proces iterativní. Nyní popíšeme kroky nutné k identifikaci, ladění a optimalizaci zatěžujících SQL příkazů. 1. Identifikace zatěžujících SQL příkazů 2. Ladění zatěžujících SQL příkazů 3. Optimalizace přístupu k datům 4. Analýza vlivu ladění jiných změn systému na výkonu SQL příkazů 5. Opakování předchozích kroků dokud nejsou všechny zatěžující SQL příkazy vyladěny 3.5.1 Identifikace zatěžujících SQL příkazů Zatěžující příkazy mohou spotřebovávat velké množství systémových zdrojů. Dokonce i když je databáze dobře vyladěna, mohou neefektivní SQL příkazy výrazně ovlivnit výkon. Identifikovat zatěžující SQL příkazy dvěma způsoby: • s využitím ADDM nálezů Při standardním nastavení je ADDM spouštěno každou hodinu. Analyzuje klíčové statistiky nasbírané AWR za poslední hodinu a identifikuje problémy včetně zatěžujících SQL příkazů. Nálezy ADDM jsou pak zobrazeny na stránce Automatic Database Diagnostic Monitor v Enterprise Manageru. Pro každý nález jsou zde doporučení jak postupovat a jaký to bude mít dopad na výkon. U zatěžujících příkazů bývá doporučení spustit nástroj SQL Tuning Advisor. • s využitím Top SQL ADDM automaticky identifikuje zatěžující SQL příkazy, které působí problémy systému jako celku. V některých případech je nutné monitorovat SQL příkazy podrobněji. Na stránce Top Activity můžeme v tabulce Top SQL sledovat zatěžující dotazy v intervalech 5 minut (viz Obr. 13). Na stránce Top SQL lze také vytvářet takzvané SQL tuning Set, což je databázový objekt, který obsahuje jeden či více SQL příkazů spolu s jejich prováděcími statistikami. SQL tuning Set vytvoříme takto: 1. Na stránce Top Activity vybereme SQL příkazy zaškrtávacími tlačítky. 2. Z rozbalovacího menu nad seznamem Top SQL vybereme Create SQL tuning Set a klikneme na GO. - 46 - Ladění databázového systému Oracle Tomáš Pobuda 3. Zobrazí se stránka, kde můžeme zadat jméno a popis SQL tuning Set a poté klikneme na OK 4. SQL tuning Set je vytvořen. Obr. 13 – Náhled stránky Top Activity [zdroj: ORA-2D] 3.5.2 Ladění zatěžujících SQL příkazů Potom co jsme identifikovaly nejvíce zatěžující dotazy, můžeme přejít k jejich ladění. K tomuto účelu využijeme nástroj SQL Tuning Advisor. Ten je zodpovědný zejména za doporučení jako je vytvoření SQL profilu a přeorganizování SQL příkazu. Nástrojem SQL Tuning Advisor můžeme ladit jeden či více SQL příkazů. Lze ladit manuálně, ale lze nastavit i automatické ladění SQL příkazů. To se spouští během okna údržby systému a snaží se vylepšit exekuční plány zatěžujících SQL příkazů. 3.5.2.1 Manuální použití SQL Tuning Advisor 1. Výběr SQL příkazů Pokud ADDM identifikuje zatěžující SQL příkazy, pak jednoduše klikneme na Schedule/Run SQL Tuning Advisor na stránce detailu doporučení. Další možností je vybrat SQL příkazy ze sekce Top SQL na stránce Top Activity. Zde zaškrtneme SQL příkazy, které chceme ladit a vytvoříme SQL tuning Set. Prvním či druhým způsobem se dostaneme na stránku s nastavením ladící úlohy. - 47 - Ladění databázového systému Oracle Tomáš Pobuda Obr. 14 – Stránka SQL Tuning Advisor [zdroj: ORA-2D] 2. Nastavení ladící úlohy Výběr rozsahu ladící úlohy: • Limited – limitovaný rozsah zabere přibližně 1 sekundu na příkaz, ale nedoporučí SQL profil • Comprehensive – při tomto rozsahu trvá úloha déle, ale provede se kompletní analýza a bude doporučen SQL profil. Musíme také nastavit časový limit ladění na jeden příkaz. • Total Time Limit – nastavíme celkový časový limit v minutách Časový plán: Zde nastavíme jestli se má úloha provést hned nebo v zadaný časový okamžik. Úlohu spustíme kliknutím na OK. 3. Zobrazení výsledků Na stránce s výsledky (Advisor Central) můžeme vidět seznam úloh a jejich stav. Pokud je stav COMPLETED, kliknutím na SQL ID se zobrazí stránka s doporučeními SQL Tuning Advisor. Obr. 15 – Stránka s doporučeními [zdroj: ORA-2D] - 48 - Ladění databázového systému Oracle Tomáš Pobuda 4. Implementace doporučení Na stránce s doporučeními pro dané SQL může být více doporučení. Zpravidla vybereme to, které má nejvyšší Benefit(%). Po stisku tlačítka Implement se doporučení provede. V našem případě byl vytvořen SQL profil (viz Obr. 16). Obr. 16 – Stránka s doporučeními – implementované doporučení [zdroj: ORA-2D] 3.5.3 Optimalizace přístupu k objektům SQL Access Advisor je nástroj, kterým zajistíme optimální přístup k datům, která jsou potřebná pro provedení SQL příkazů. Generuje doporučení jak nastavit materializované pohledy a logy pohledů, indexy, SQL profily a partition pro dané zatížení databáze. Není to však zadarmo. Realizace těchto objektů je náročná při update operacích na čas i úložný prostor. 3.5.3.1 Spuštění SQL Access Advisor Tento úkol rozdělit do několika kroků: 1. Výběr počátečních parametrů • zobrazíme stránku SQL Advisor: Initial options (Advisor Central – SQL Advisors – SQL Access Advisor) • Vybereme Recommend new access structure • Stiskneme Continue – zobrazí se stránka SQL Access Advisor: Workload Source Obr. 17 – stránka SQL Acces Advisor: Initial Options [zdroj: ORA-2D] 2. Výběr zdroje zátěže • Vybereme možnost Use existing SQL Tunning Set • Klikneme na baterku a vybereme SQL tuning Set • Klikneme na next 3. Definice filtrů Tuto možnost používat nebudeme, tudíž jí nebudeme ani popisovat. - 49 - Ladění databázového systému Oracle Tomáš Pobuda 4. Výběr doporučení • zaškrtnutím vybereme doporučení, která chceme generovat (indexes, materialized views, partitioning) • vybereme hloubku analýzy (limited mode, comprehensive mode) • klikneme na next 5. Naplánování úlohy SQL Access Advisor • nastavíme jméno a popis • ostatní hodnoty ponecháme standardní • klikneme na next • zobrazí se stránka s rekapitulací nastavení • klikneme na submit Obr. 18 – stránka SQL Access Advisor: Schedule [zdroj: ORA-2D] - 50 - Ladění databázového systému Oracle Tomáš Pobuda 3.5.3.2 Zobrazení doporučení SQL Access Advisor Na stránce Advisor Central je seznam úloh s možností filtrace dle typu úlohy. Mimo jiné jsou zde výsledky úloh SQL Access Advisor. Pro prohlížení vybereme úlohu a stiskneme tlačítko View Result. Dostaneme se na stránku úlohy, která je rozdělena na čtyři záložky: Summary, Recommendations, SQL Statements, Details. Na těchto záložkách jsou údaje o analyzovaných SQL příkazech, doporučení, možné zlepšení výkonu a rekapitulace nastavení. Obr. 19 – stránka zobrazení SQL Acces Advisor [zdroj: ORA-2D] 3.5.3.3 Implementace doporučení SQL Access Advisor Implementaci popíšeme v několika krocích: • Přejdeme na záložku Recommendations • Vybereme doporučení zaškrtnutím • Stiskneme tlačítko Schedule Implementation • Zobrazí se stránka pro zadání úlohy • Nastavíme jméno úlohy a jestli se má pokračovat v úloze, když dojde k chybě • Stiskneme tlačítko Submit • Je vytvořena úloha, která implementuje doporučení - 51 - Ladění databázového systému Oracle Tomáš Pobuda Obr. 20 – záložka Recommendation zobrazení SQL Acces Advisor [zdroj: ORA-2D] 3.5.4 Analýza vlivu ladění a jiných změn systému na výkonu SQL příkazů K analýze vlivu změn, které jsme udělali prostřednictvím nástrojů SQL Tuning Advisor a SQL Access Advisor, použijeme nástroj SQL Performance Analyzer. Použití SQL Performance Analyzeru v krocích: Zobrazíme si stránku SQL Performance Analyzer (Advisor Central – SQL Performance Analyzer) Vybereme Guided Workflow - to nás provede celým procesem: 1. Vytvoření úlohy SQL Performance Analyzer založené na SQL Tuning Set 2. „Přehrání“ SQL Tuning Set ve výchozím prostředí 3. „Přehrání“ SQL Tuning Set ve změněném prostředí 4. Porovnání kroku 2 a 3 5. Zobrazení výsledků porovnání - 52 - Ladění databázového systému Oracle Tomáš Pobuda Obr. 21 – Guided Workflow SQL Performance Analyzeru [zdroj: ORA-2D] - 53 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda 4 Ladění databáze systému digitálního archivu SAFE V předchozí kapitole jsme popsali jak nastavovat jednotlivé parametry databáze a také jak používat některé nástroje pro ladění. V této kapitole nejprve popíšeme systém SAFE a implementaci systému, na které provádíme testy a ladíme jeho databázi. Tato implemetace systému SAFE je základ pro většinu standardních implemetací pro firmy. Budeme pro ni zjišťovat, jaké nastavení paměti je pro ni nejvhodnější. To pomůže implementátorům tohoto systému vytipovat oblasti, kterým je vhodné se věnovat. Abychom mohli ladit databázi, musíme vybrat nástroj, který nám bude generovat zátěž systému. Tímto tématem se zabývá kapitola 4.2. Nejprve zmapujeme oblast testovacích nástrojů. Poté si definujeme kritéria výběru nástroje a nakonec jeden nástroj vybereme. Pomocí tohoto nástroje vytvoříme testovací scénáře, které použijeme při ladění databáze. Jakmile vytvoříme testovací scénáře, můžeme přistoupit k ladění databáze. Nejprve nastavíme inicializační parametry databáze, dle doporučení z kapitoly 3.4.1. Následně se budeme věnovat nastavení paměti databáze. Nejdříve ponecháme Automatickou správu paměti, aby rozdělila dostupnou paměť mezi paměťové prostory. Spustíme zátěž systému a zaznamenáme jeho výkon. Poté pomocí statistik popsaných v kapitole 3.4.3 rozhodneme, jaké nastavení paměťových prostorů by mohlo zvýšit výkon databáze. Nastavíme velikost paměťových prostorů ručně a spustíme zátěž a zaznamenáme si výkon. Díky těmto údajům pak porovnáme výkon při různých nastaveních. Jako poslední provedeme kalibraci a konfiguraci I/O. Nejprve spustíme kalibraci a poté rozhodneme, jaké akce by mohli zvýšit výkon databáze. Poslední kapitola se zabývá otázkou rychlosti ukládání souborů digitálního archivu SAFE na souborový systém a do databáze. Pomocí testovacího scénáře, který bude zajišťovat vkládání objektů archivu se sobory (obrázky), zjistíme, jestli je rychlejší ukládat soubory do databáze či na souborový systém. Při obou situacích si zaznamenáme výkon systému SAFE a tyto údaje porovnáme. Výkon systému budeme měřit porovnáváním odezvy pro uživatele. Jak je vidět z Obr. 22, tak je odezva pro uživatele složena z více časů. Jsou to časy internetového prohlížeče (překlad stránky), přenosů po síti (wan, lan), aplikačního serveru (Apache Tomcat,SAFE) a databáze (Oracle). My budeme laděním ovlivňovat pouze DB time (čas databáze). Obr. 22 – Čas odezvy pro uživatele [zdroj: ORA-2D] 4.1 Popis systému SAFE Tato kapitola má za cíl seznámit čtenáře se systémem SAFE a terminologií používanou v souvislosti s tímto systémem. Terminologie pro popis objektů použitá v této kapitole je odlišná od obecně rozšířené terminologie. Základní rozdíly jsou uvedeny v tabulce XWX. Další termín, který by mohl mást čtenáře je termín „definice“. Když implementátor vytváří datový model projektu (vytváří definice), tak vlastně definuje objekty a jejich vlastnosti. - 54 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Tab. 23 – Rozdíly v terminologii Obecně rozšířená terminologie objekt vlastnosti (atributy) objektu instance objektu Terminologie implementátorů SAFE definice či definice objektu vlastnosti definice objekt(y) definice 4.1.1 Charakteristika systému SAFE Úvodem představíme systém SAFE. Zde jsou přehledně po bodech uvedeny jeho charakteristické rysy: • Zpracování velkého množství dokumentů - Systém je navržen tak, aby byl schopný uložit velké množství dokumentů a uměl nad těmito daty efektivně pracovat - například rychlé vyhledávání a import dat. Systém byl nasazen na desítky miliónů dokumentů, rychlost importu až 120000 dokumentů za hodinu (bez souborů). • Objektový přístup - Veškerá data v systému SAFE jsou objekty. To umožňuje jednotný přístup, ať je objekt dokument, uživatele nebo dotaz systému. Například při exportu/importu dat, vyhledávání se pracuje stejně, nezávisle na typu objektu. Pomocí dědičnosti lze objekty rozšiřovat o požadované nové vlastnosti. • Verzování dokumentů - Systém automaticky verzuje uložená data. Lze se kdykoliv vrátit k dřívější verzi dokumentu a lze kdykoliv určit kdo a kdy změnil příslušný dokument. Verze jsou chápány jako speciální objekty, takže je možné informace o verzích i vyhledávat. • Souběžný přístup k dokumentům - Systém zaručuje, že jeden dokument může v jednom okamžiku editovat pouze jeden uživatel a díky tomu lze zamezit kolizím. • Parsování dokumentů - Při vložení souboru do systému se mohou automatiky načíst metadata souboru a uložit do vlastností dokumentu. Parsování lze provádět například nad soubory typu DOC, ODT, XML, PDF. Nad těmito daty lze efektivně vyhledávat. • Fulltextové vyhledávání - Systém umožňuje jak objektové, tak i fulltextové vyhledávání. Podle charakteru vložených dat lze předpřipravit nejvhodnější způsob, jak dokumenty vyhledat. • Workflow - Systém podporuje oběh dokumentů ve společnosti. Definuje zodpovědnost za úkol, termíny splnění, historii procesu. Procesy lze definovat ve standardním jazyku BPEL, jednodušší procesy lze pouštět v systému i bez přítomnosti BPEL. • Přístup přes WebDav - Uživatel nemusí vždy využívat webové rozhraní pro přístup k dokumentům. V případě jednoduchých akcí jako editace, nebo zobrazení dokumentu lze využít přístup přes WebDav. Potom se se soubory pracuje stejně tak, jako kdyby byly uložené na síťovém disku. • Více klientských aplikací -Systém je otevřený pro různé klientské aplikace. V současné době je implementováno webové rozhraní a přístup přes WebDav. • Rozšiřitelnost systému - Systém lze rozšířit podle specifických požadavků, například definovat validaci dokumentu, počítat generované vlastnosti, definovat vzhled uživatelského webového rozhraní. • Komplexní přihlašování do systému - Systém mimo jiné podporuje přihlašování přes Kerberos, data o uživatelích lze načítat přes LDAP. Podpora zastupování uživatelů. • Rozhraní pro aplikace třetích stran - Systém umí komunikovat s jinými aplikacemi pomocí standardních rozhraní CORBA a WebService. Dokumentované rozhraní umožňuje případnou návaznost jiných softwarových řešení v budoucnu a tím se životnost systému zvyšuje. - 55 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda • Nezávislost na operačním systému - Systém lze provozovat na všech moderních operačních systémech (kde běží JVM). Případná migrace na jiný operační systém není problém. • Podpora více datových úložišť - Pro uložení souborových dat lze využít databázi, souborový systém, nebo pásku. Jednotlivé typy uložení lze kombinovat a současně využívat výhod zmíněných zařízení. • Podpora více databází - Systém umí spolupracovat s databází Oracle, MS SQL a (MySQL). • Třívrstvá architektura - Moderní třívrstvá architektura (Databáze - Aplikační server - WWW server) zajišťuje bezpečnost řešení a umožňuje škálovat požadavky na server. 4.1.2 Architektura Systém SAFE využívá třívrstvou architekturu klient-server. • Datová vrstva - souborové úložiště a relační databáze. Tato vrstva dlouhodobě ukládá data uložená v systému. Datová vrstva je přístupná jen pro model. • Model – server systému Safe III. Poskytuje aplikační rozhraní pro přístup k datům a pro manipulaci s nimi. Nad nízkoúrovňovými daty (soubory, databázovými tabulkami) vytváří vyšší abstrakce v podobě aplikačního rozhraní. S daty nelze pracovat jinak než skrze toto rozhraní. • Prezentační vrstva - webový server, případně klientská aplikace. Nad aplikačním rozhraní staví grafické uživatelské rozhraní. Obr. 23 – Architektura SAFE Datová vrstva a model neumožňují žádné alternativy k předchozímu obrázku. Na druhé straně prezentační vrstva je volitelná – klient může pracovat přímo s aplikačním rozhraním modelu. Toho se využije zejména pro realizaci neinteraktivních aplikací jako export a import, nebo pro integraci s jinými systémy. Interaktivní klient ovšem také není omezen pouze na prohlížení webových stránek pomocí webového prohlížeče. Klientská aplikace může komunikovat přímo s modelem a data prezentovat vlastním způsobem, např. pomocí místního grafického prostředí nebo na terminálové konzoli (v případě řádkových klientů). Ať už klient přistupuje k modelu přímo, nebo pomocí nezávislé prezentační vrstvy, jeho požadavky vždy nakonec používají jednotné aplikační rozhraní modelu. Toto rozhraní je specifikováno v jazyce IDL (OMG Interface Definition Language) a používá se skrze middleware CORBA - tedy z různých platforem i programovacích jazyků. Pro ty, kteří před CORBOU preferují jiné technologie, existuje možnost předřadit před model komponentu, která bude navenek komunikovat preferovaným protokolem. Distribuce SAFE standardně obsahuje popis části rozhraní i v jazyce WSDL (Web Service Definition Language) a modul pro webový server, který navenek komunikuje dle standardu Web-Services. Tento způsob se používá mimo jiné pro komunikaci s workflow strojem, tj. systémem, který řídí běh workflow procesů. - 56 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Obr. 24 – Různé přístupy k SAFE 4.1.3 Datový model 4.1.3.1 Statická část datového modelu Statickou část datového modelu tvoří tabulky, ve kterých mají uložená data jednotlivé služby (např. Správce definic). O tyto tabulky se stará příslušná služba, tedy o vytvoření a případné změny. Popis statických tabulek: • DynamicFS (služba DynamicFS) – jsou zde uloženy adresy souboru dynamického souborového systému. • EventList (služba EventLog) – je zde uložen seznam událostí, které mohou být v systému sledovány, a jejich parametry. • IndexDef (služba ObjectDefManager) – jsou zde uloženy definice indexů na vlastnostech objektů v systému. • ObjectDef (služba ObjectDefManager) – jsou zde uloženy definice objektů v systému. • ObjectRight (služba RightsStorage) – jsou zde uloženy práva účastníků na objekty v systému s příslušnou maskou práv. • PropertyDef (služba ObjectDefManager) – jsou zde uloženy definice vlastností objektů v systému • Sequences (služba Sequences) – jsou zde uloženy sekvence v systému, tzn. jméno sekvence a její aktuální hodnota. • ServiceList (správce služeb) – jsou zde uloženy nainstalované služby systému a jejich aktuální verze. • Storage (služba DBStorage) – tato tabulka je databázové datové úložiště. - 57 - Ladění databáze systému digitálního archivu SAFE • Tomáš Pobuda UserLogin (služba LoginService) – v této tabulce jsou uloženy informace o přihlášení uživatelů. 4.1.3.2 Dynamická část datového modelu Dynamická část datového modelu je tvořena tabulkami objektů vytvořených podle definic v systému. Každá definice má hlavní tabulku, kde jsou uloženy všechny hodnoty jednoduchých vlastností objektů dané definice, a pak pro každou vícenásobnou vlastnost je vytvořena extra tabulka, kam se ukládají hodnoty této vícenásobné vlastnosti. Hlavní tabulka nemusí existovat, pokud definice nemá žádné jednoduché vlastnosti. Vzhledem k tomu že definice jsou hierarchicky uspořádané i jejich tabulky mají hierarchii. Do hlavní tabulky definice se ukládají jen hodnoty vlastností definované v této definici, zděděné vlastnosti z nadřazených definic se ukládají do tabulek příslušných definic. Tabulky vždy obsahují sloupec C_ID, což je identifikátor objektu, přes který jsou svázány do stromové hierarchie, přesně jako příslušné definice, vazba je realizována referenční integritou (cizí klíč). Jména tabulek vždy začínají prefixem t_ pak je připojeno jméno definice a u tabulek vícenásobných vlastností ještě podtržítko a jméno vícenásobné vlastnosti. Jména sloupců hlavní tabulky se shodují se jmény jednoduchých vlastností příslušné definice s připojeným prefixem c_. Obr. 25 – stromeček definic v systému SAFE 1. Menu pro tvorbu nových definic a úpravu stávajících. 2. Strom s jednotlivým definicemi. 3. Informace o označené definici – název, vlastnosti a zděděné vlastnosti. Tyto informace si zobrazíte kliknutím na některou z definicí ve stromu. 4. Název definice s konfiguračními atributy. 5. Vlastnosti definice. 6. Vlastnosti, které definice dědí od definice nadřazené. Dynamické je i vytváření indexů nad sloupci tabulek, takto vytvořené indexy mají jméno složené z prefixu IX_ a výsledku nějaké hašovací funkce (MD5), aplikované na parametry indexu. - 58 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda 4.1.4 Definice objektů Na systém SAFE se lze dívat jako na množinu trvalých objektů. Každý objekt je určitého typu. Typ objektu určuje, jaké má objekt vlastnosti, jak se zobrazí na obrazovce, či jak je možné jej vyhledat. Typy objektů nejsou předem dány, je možné zakládat nové, nebo měnit a rušit již existující typy. Při vytváření nového typu je třeba tento typ popsat. Tomuto popisu říkáme definice typu objektu nebo také definice objektu. Typy objektu tvoří hierarchii. Existuje jeden kořenový typ objekt. Ten má své potomky (dokument,účastník, úkol) a ty mohou mít další potomky. Například typ dokument může mít potomky soubor,svazek, rozhodnutí. Hlavním úkolem definice je stanovit seznam vlastností objektu. Seznam vlastností se dědí. To znamená, že dceřiná definice definuje kromě svých vlastností také stejné vlastnosti jako definice rodičovská. Každá vlastnost je nějak popsána. Tomuto popisu říkáme definice vlastnosti. 4.1.4.1 Struktura definice objektu Jméno - Jednoznačná identifikace definice. Smí obsahovat pouze ASCII písmena a číslice. První znak musí být písmeno. Identifikace se používá například ve vyhledávacích dotazech nebo ve jménech specializovaných JSP stránek. Titulek - Jednořádkový název definice objektu. Popis - Textový popis definice objektu. Smí obsahovat libovolný text a konce řádků. Vlastnosti - Seznam definic vlastností. Zobrazovaná položka - Často je třeba uživateli zobrazit objekt ve zkrácené podobě, bez všech vlastností, jen jako ikonu v nějaké stránce. Proto je možné vybrat jednu z vlastností a její text se pak v těchto případech používá. Atributy - Atributy umožňují provádět různá nastavení vztahující se k typu objektu. Zapisují se ve formě jméno_atributu=hodnota na samostatné řádky. Pomocí těchto nastavení lze například určit, že každý vkládaný soubor se má parsovat, nebo zda se pro tento typ dokumentu provádí fulltextová indexace. - 59 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Obr. 26 – Editace definice 4.1.4.2 Struktura definice vlastnosti Jméno - Jméno jednoznačně identifikuje vlastnost uvnitř definice. Různé definice mohou obsahovat vlastnost se stejným jménem, nesmí však být jedna potomkem druhé. Smí obsahovat pouze ASCII písmena a číslice. První znak musí být písmeno. Identifikace se používá například ve vyhledávacích dotazech, ve jménech tagů v importovaných souborech, či uvnitř specializovaných JSP stránek. Titulek - Jednořádkový název definice vlastnosti. Popis - Textový popis definice vlastnosti. Smí obsahovat libovolný text a konce řádků. Typ - Určuje jaké hodnoty smí vlastnost obsahovat. string ASCII znaky. wstring Libovolné znaky. long_long 8B celé číslo. Rozsah je -2^63 až 2^63-1, neboli -9,223,372,036,854,775,808 až 9,223,372,036,854,775,807 long 4B celé číslo. Rozsah je -2^31 až 2^31-1, neboli -2,147,483,648 až 2,147,483,647 short 2B celé číslo. Rozsah je -2^15 až 2^15-1, neboli -32,768 až 32,767 double 8B desetinné číslo s plovoucí čárkou (standard IEEE 754 double precision). utct Datum a čas. object_XXX Odkaz na objekt typu XXX. Kardinalita - Určuje násobnost vlastnosti. optional Vlastnost se v objektu může vyskytovat nejvýše jednou. obligatory Vlastnost se v objektu může vyskytovat právě jednou. list Vlastnost se může v objektu vyskytovat vícekrát. Hodnoty vlastnosti se mohou opakovat, pořadí jednotlivých hodnot stanovuje uživatel. set Vlastnost se může v objektu vyskytovat vícekrát. Hodnoty vlastnosti se nemohou opakovat, pořadí jednotlivých hodnot určuje systém (např. podle abecedy). - 60 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Fragment - Má význam jen u typů object_XXX. Je-li nastaven, znamená, že odkazované objekty jsou součástí odkazujícího se objektu. Například se pak řídí jeho právy nebo se odstraňují společně s ním. Jen čtení - Hodnotu takovéto vlastnosti uživatel nemůže měnit, může ji ale nastavit při vytváření objektu. Generované - Hodnotu generované vlastnosti uživatel nezadává při vytváření objektu, může ji ale následně měnit. Pro vlastnosti spravované systémem se proto používá nastavení Generovaná a Jen ke čtení. Odvozené - Většina vlastností se ukládá přesně definovaným způsobem do databáze. To umožňuje podle nich objekt nalézt a zkonstruovat. Některé vlastnosti ale systém buď počítá z jiných, nebo je ukládá jiným způsobem. Tyto vlastnosti mají příznak Odvozené, lze je zobrazovat, mohou jít i editovat, nelze však podle nich vyhledávat. Vytvoření odvozené vlastnosti musí vždy doprovázet její naprogramování. Velikost - Má význam pouze u typů string a wstring. U těchto typů je důležité stanovit maximální počet znaků. Podle velikosti se volí například způsob uložení vlastnosti a tím i rychlost vyhledávání. Velikost lze nastavit i na 0, pak je neomezená. (Je omezená délkou memo sloupce v použitém databázovém serveru.) Počet desetinných míst - Má význam pouze u typů short, long a long_long. Vlastnosti těchto typů pak mohou obsahovat desetinná čísla s přesně daným počtem desetinných míst. Lze použít například pro vyjádření měny. Atributy - Atributy vlastnosti umožňují provádět různá nastavení vztahující se k typu vlastnosti. Zapisují se ve formě name=value na samostatné řádky. Pomocí těchto nastavení lze například určit, jak se bude příslušná vlastnost zobrazovat uživateli, nebo jak se bude validovat. Atributy vlastnosti lze psát rovněž do atributů definice. V tom případě mají vždy tvar property.XXX.jméno_atributu=hodnota, kde XXX je jméno vlastnosti. - 61 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Obr. 27 – Editace vlastnosti definice 4.1.4.3 Struktura definice indexu Seznam indexovaných sloupců - Uvádí se výčet sloupců, které mají být zahrnuty do indexu. Vícenásobné vlastnosti lze indexovat pouze samostatně. Nastavení indexu na fulltextový se provádí dodatečným parametrem a takový index, lze vytvořit jen nad jednou vlastnosti, v případě databázového serveru Microsoft navíc tato vlastnost nesmí být vícenásobná. Seznam dodatečných parametrů - Každý parametr je dvojice klíč=hodnota a musí být na samostatném řádku. Podporované dodatečné parametry: • fulltext – akceptovatelné hodnoty jsou „y“ a „n“, výchozí je „n“. Zapnutý - Příznak, je-li index zapnutý nebo vypnutý, tzn. existuje jeho definice v systému, ale index fyzicky vytvořen není. 4.1.4.4 Manipulace s definicemi Definice lze vytvářet, měnit nebo odstraňovat pomocí webového rozhraní nebo pomocí xml souboru. Operace může provádět pouze člen role DefinitionManagers. Odstranit lze jen takovou definici, která nemá potomky, na kterou neukazuje vlastnost typu object_ a podle níž neexistují v systému žádné objekty. Definici podle níž neexistují v systému žádné objekty lze měnit libovolně. U ostatních definic, jsou omezeny změny v seznamu vlastností. Nelze například změnit vlastnost typu řetězec na vlastnost typu číslo. Administrace definic se provádí také pomocí XML souboru. Ten musí být napsán podle definovaného XML schématu. Pro databázi Oracle dochází, při (re)instalaci definic dochází k přepočítávání statistik, které ovlivňují spouštění SQL příkazů do databáze. Přepočítávání se provádí pro každou definici po - 62 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda vytvoření všech tabulek a indexů, pro definice bez indexů se přepočítávání neprovádí. Lze také spočítat statistiky i pro celé schéma. K tomuto účelu se používá balíček DBMS_STATS 4.1.4.5 Společné vlastnosti všech objektů Všechny definice jsou potomky definice Object. Ta má následující vlastnosti: • id Jednoznačná identifikace objektu. • objectDefName Typ (jméno definice) objektu. • createUser Kdo objekt vytvořil. • createDT Kdy byl objekt vytvořen. • modifyUser Kdo objekt naposledy změnil. • modifyDT Kdy byl objekt naposledy změněn. • parent Je-li objekt fragmentem jiného objektu, ukazuje na něj vlastnost parent. • owner Ukazuje na nejvrchnějšího podle vlastnosti parent, nebo na sebe. • ownerDefName Typ objektu, na který ukazuje owner. Objekty samy o sobě nedefinují žádná práva, to dělají až jejich potomci. 4.1.5 Vyhledávání Vyhledávat lze v systému SAFE v zásadě dvěma způsoby. Buďto hledáme objekty, to znamená, že hledáme v datech uložených v databázových tabulkách. Nebo hledáme fulltextově, což znamená, že hledáme v souborech (pdf, doc, txt, odt) uložených v archivu. 4.1.5.1 Objektové vyhledávání Pro tento způsob vyhledávání je nutná znalost uspořádání objektů systému SAFE a jejich vlastností. Syntaxe dotazu je podobná syntaxi dotazu jazyka SQL. Vyhledávací služba kontroluje nejen syntaxi dotazu, ale i existenci a datové typy vlastností použitých v podmínce pro vyhledávání. Do podmínky lze napsat jakoukoliv vlastnost z definice objektu a také všech jejích předků až k objektu Object. Dále se kontroluje vstupní formát data, desetinných čísel a použitelnost datových typů s konkrétním operátorem v podmínce. Syntaxe dotazu se skládá ze jména definice objektu, seznamu podmínek na hodnoty vlastností a seznamu zobrazených sloupců ve výsledku. Podmínky lze spojovat logickými operátory AND a OR, případně lze použít i operátor negace NOT. Podmínky lze libovolně závorkovat a je akceptována i prázdná podmínka (závorky ale musí zůstat). Do seznamu sloupců pro zobrazení ve výsledku se píší jména vlastností, oddělená čárkou. Navíc zde lze určit směr třídění výsledku a to zapsáním klíčových slov DESC nebo ASC a čísla, jako pořadí třídění, za jméno vlastnosti. Nelze třídit podle vícenásobných vlastností. Seznam vlastností smí obsahovat i vlastnosti z rodičovských definic objektů k definici jejíž objekty chceme vyhledávat. Obecný zápis dotazu: [<seznam_dodatečných_tributů>]<jméno_definice_objektu>(<seznam_podmínek>)[<seznam_slou pců_výsledku>] 4.1.5.2 Fulltextové vyhledávání Fulltextové vyhledávání je v systému SAFE realizováno pomocí externího vyhledávacího stroje Lucene. V současné době je možné indexovat libovolný dokument (resp. jeho vlastnosti, přílohy) uložený v systému SAFE. Podporované formáty souborů, které lze indexovat jsou PDF (pouze neuzamčené dokumenty), DOC, TXT, XML, a soubory OpenOffice resp. podle MIME typů - 63 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda application/pdf, application/msword, text/plain, application/x-extension-txt, text/xml, application/vnd.oasis.opendocument.text. Indexace je nezávislá na velikosti písmen.Fulltextová služba pracuje tak, že asynchronně poslouchá události o změnách dokumentů. Při indexaci dokumentu se ve vyhledávacím stroji vytvoří „dokument“, který má vlastnosti, podle kterých lze později vyhledávat. Vlastnosti dokumentu se dělí na: • indexované vlastnosti • indexované a uložené vlastnosti Indexované a uložené vlastnosti jsou ty vlastnosti, podle kterých lze vyhledávat a jejichž obsah lze zobrazit (například v tabulce výsledků vyhledávání). Podle „indexovaných vlastností“ lze vyhledávat, ale jejich obsah již nelze zobrazit. Při indexaci perzistentního objektu se automaticky ukládá jeho identifikační číslo (v rámci systému jedinečné), jeho typ (jméno definice, podle které byl objekt vytvořen) a tzv. „Zobrazovaná položka“ (tj. vlastnost určená v definici, která popisuje objekt). 4.1.6 Popis testovacího systému SAFE Systém SAFE lze přizpůsobit každému zákazníkovi na míru. V tomto ohledu je velice flexibilní. Pro testy a ladění databáze jsem vybral implementaci systému SAFE, která je určena jako balík modulů pro typického zákazníka (adresář, smlouvy, faktury, pošta). My budeme z této implementace využívat agendu faktur. Pro jasné označení této implementace budeme používat název SAFE XY. Nyní popíšeme uživatelské prostředí této implementace, tedy SAFE XY. To proto, aby si čtenář dokázal představit jak se se systémem pracuje a lépe tak pochopil testovací scénáře popsané dále. Uživatelské prostředí můžeme rozdělit na tyto komponenty (viz Obr. 28): Obr. 28 – Komponenty uživatelského prostředí Vyhledávací dotaz Záložka Složkový dotaz Zakládací link • záložky – mění zobrazení složek a vyhledávacích dotazů, které se zobrazují uživateli. Pro naše účely budeme využívat pouze záložky Moje Faktury a Faktury (viz Obr. 28). • složkové dotazy (složky) – zobrazují dokumenty splňující příslušná kritéria, jejich počet a umožňují přístup k těmto dokumentům (viz Tab. 24). - 64 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Tab. 24 – Složkové dotazy na záložce Moje Faktury Složkový dotaz Popis a podmínka pro zobrazení faktury ve složce Moje faktury NOVÉ Faktury byly právě založeny a není u nich ještě vybrán žádný schvalovatel. Moje faktury K ZAÚČTOVÁNÍ Všechny faktury, které již byly schváleny, tj. faktury jsou ve stavu schválená. Nejsou zaúčtovány. Moje faktury K PROPLACENÍ Všechny faktury, které již byly schváleny, tj. faktury jsou ve stavu schválená. Nejsou proplaceny. • vyhledávací dotazy – umožňují zadat parametry dotazu a vyhledat tak požadovanou fakturu (viz Obr. 28). My budeme používat pouze dotaz Faktury přijaté (viz Obr. 29). Ten vyhledává nad všemi fakturami dle příslušných parametrů, které může uživatel zadat. Obr. 29 – Vyhledávací dotaz Faktury přijaté • zobrazení faktury – umožňuje zobrazit vlastnosti faktury (čárový kód, částka, dodavatel) a přepnout se na stránku Průvodka. Obr. 30 – Zobrazení faktury - 65 - Ladění databáze systému digitálního archivu SAFE • Tomáš Pobuda podpisy – umožňují zpracování faktur, jsou analogií k razítkům, která by mohla být použita na fakturu v papírové formě. (např. schvaluji, neschvaluji, atd.). Na stránce Průvodka lze tyto podpisy vytvořit a sledovat jejich historii (viz Obr. 31). Popis podpisů viz Tab. 25. Tab. 25 – Popis podpisů na stránce Průvodka Podpis Popis Předat správu faktury Na faktuře se tímto podpisem vybere nový účetní. Potvrdit schválení Účetní potvrzuje schválení faktury. Stav faktury se mění na schválená, a uzamkne se. Zaúčtováno Faktura byla již „fyzicky“ zaúčtována, tento podpis stvrzuje tuto provedenou akci. Hodnota vlastnosti zaúčtováno na faktuře se mění na 1. Proplaceno Faktura byla již „fyzicky“ proplacena, tento podpis stvrzuje tuto provedenou akci. Hodnota vlastnosti proplaceno na faktuře se mění na 1. Obr. 31 – Podpisy na stránce Průvodka • zakládací linky – umožňují uživateli vytvářet faktury (viz Obr. 32). Obr. 32 - Vytváření faktury 4.2 Testovací nástroje Tato kapitola má za cíl vybrat a popsat vhodný testovací nástroj pro aplikaci SAFE. Abychom mohli testovat databázový systém aplikace SAFE, potřebujeme generovat zátěž samotné aplikace SAFE. Jedna z možností je použití testovacího nástroje, který umí po naprogramování simulovat práci uživatelů. Jak bylo popsáno výše, uživatelé pracují s aplikací SAFE pomocí webových stránek (HTML dokumenty). Komunikace mezi WWW Serverem a uživatelem probíhá podle protokolu HTTP(Hypertext Transfer Protocol) (viz Obr. 33). Uživatel pošle serveru dotaz a server vygeneruje odpověď a pošle ji uživateli zpět. Díky znalosti HTTP protokolu a HTML formátu lze snadno simulovat uživatelské akce a kontrolovat odpovědi WWW serveru. - 66 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Obr. 33 – HTTP protokol [HAVLIN] Nástrojů, které umožňují takto generovat zátěž je celá řada. Ne všechny však zdarma k použití. Vybereme z nich pouze jeden, který bude nejvíce odpovídat našim potřebám. Nástroje, které byly vybrány z širšího výběru jsou: • Selenium – lze s ním rychle vytvářet testy v prohlížeči Mozilla Firefox. Vytvoření testu je opravdu velice rychlé a snadné. Stačí zaznamenat „klikáním“ chování uživatele. Takový test je pak možné spouštět. • Apache JMeter – nelze s ním vytvářet testy tak jednoduše jako se Seleniem, ale tento nástroj poskytuje daleko více možností simulace práce uživatele. Je vhodný pro zátěžové testy serverů, jelikož dokáže simulovat velké množství uživatelů. Pro výběr testovacího nástroje jsem zvolil tato kritéria a jejich váhy: • kontrola příchozí odpovědi – váha 0,2 • komfort tvorby testu – váha 0,2 • možnosti nastavení testu – váha 0,3 • zobrazení výsledků – váha 0,2 • uživatelské prostředí – váha 0,1 Hodnocení dle těchto kritérií bylo provedeno subjektivně na stupnici 1-5 (1 nejhorší, 5 nejlepší). Analýza testovacích nástrojů není předmětem této práce a tak pouze uvedeme tabulku s hodnotami kritérií a výpočet pro výběr varianty(viz Tab. 26). Tab. 26 – Hodnocení testovacích nástrojů Selenium Apache JMeter kontrola příchozí odpovědi 3 4 komfort tvorby testu 5 3 možnosti nastavení testu 3 5 zobrazení výsledků 2 5 uživatelské prostředí 4 4 Rozhodnutí o výběru testovacího nástroje provedeme metodou WSA (Weighted Sum Average metoda váženého součtu). Výpočet provedeme v tabulce (viz Tab. 27). - 67 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Tab. 27 – Výběr testovacího nástroje metodou WSA Selenium Apache JMeter váhy kontrola příchozí odpovědi 3 4 0,1 komfort tvorby testu 5 3 0,2 možnosti nastavení testu 3 5 0,4 zobrazení výsledků 2 5 0,2 uživatelské prostředí 4 4 0,1 WSA 3,3 4,4 Jak je vidět z výsledků v tabulce Selenium má vážený součet roven 3,3 a Apache JMeter 4,4. To znamená, že dle hodnocení a výběru metodou WSA, je vhodnějším nástrojem Apache JMeter. Proto si ho zvolíme jako testovací nástroj. 4.2.1 Testovací nástroj Apache JMeter Aplikace JMeter byla původně navržena pro testování webových rozhraní. Je však použitelná i pro testování jiných částí Java aplikací. My budeme využívat jeho schopnosti při testování webových rozhraní. Tento nástroj bude vytvářet zátěž na našem systému SAFE a my budeme sledovat jeho výkon. Konkrétně výkon databáze. JMeter dokáže vytvářet GET i POST HTTP dotazy, nahrání souboru na server, FTP dotazy, volání webových služeb, spouštění databázových příkazů, LDAP dotazy a mnoho dalších. My budeme využívat pouze HTTP dotazy. 4.2.1.1 Tvorba testovacích scénářů Test v JMeter se zadává ve formě stromu (viz Obr. 34) a nazývá se TestPlan. Tento strom může obsahovat různé elementy, které určují běh testu. Nyní si popíšeme ty, které budou použity v testech pro systém SAFE. TestPlan Je to kořenový uzel. Lze zde nastavit, aby se každá skupina vláken (Thread Group) spouštěla sériově nebo paralelně. Dalším nastavením je zaškrtávácí tlačítko Functional Test Mode. Při zapnutém se uchovává vše co přišlo od serveru. Velice však roste soubor, do kterého se data ukládají a není vhodné pro zátěžové testy. Dají se zde také definovat proměnné, které pak můžeme následně používat v ostatních elementech. Například jmenuje-li se proměnná port, pak se na ní odkazujeme zápisem ${port}. Thread Group Výchozí bod testovacího plánu. Všechny ostatní elementy musí být umístěny jako potomci nějakého elementu Thread Group. Tímto elementem se řídí spouštění testovacích vláken. Umožňuje nastavit (viz Obr. 34): • Name – Jméno skupiny vláken • Comments – Komentář • Action to be taken after a Sampler error - Akce při chybě • Number of threads - Počet vláken • Ramp-Up Period – za jak dlouho se vytvoří všechna vlákna • Loop Count – počet opakování • Forever – při zaškrtnutí se test opakuje do nekonečna - 68 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Obr. 34 – Rozhraní pro nastavení elementu Thread Group Vzorkovače (Samplers) Slouží k odesílání požadavků na server a ke sledování rychlosti odezvy. Ke vzorkovačům mohou být přidruženy konfigurační elementy pro jednodušší správu. Získané vzorky jsou zpracovávány posluchači (Listeners). JMeter má k dispozici více druhů vzorkovačů (HTTP Request, FTP Request, JDBC Request, Java Request, LDAP Request, SOAP/XML-RPC Request, Web Service (SOAP) Request, atd.). Pro naše testy bude využíván vzorkovač: HTTP Request Slouží ke konfiguraci HTTP požadavků, které budou posílány na server. Následuje popis nastavení (viz Obr. 35): • Name – Jméno požadavku • Commnents – Komentář • Server Name or IP – název nebo IP adresa serveru • Port Number – Číslo portu (Standardně: 80) • Protocol – použitý protokol (HTTP, HTTPS, FILE. Standardně: HTTP) • Method – metoda HTTP požadavku (GET simuluje „klasické“ klikání uživatele, POST obvykle odpovídá odeslání formuláře na zadanou stránku) • Content encoding – používané kódování • Path – cesta ke zdroji na serveru • Redirect Automatically – výchozí http ovladač autamoticky sleduje přesměrování, tzn. že není zaznamenáváno JMeterem. • Follow Redirects – následovat přesměrování • Use KeepAlive – posílá v hlavičce HTTP příznak Connection: keep-alive. - 69 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda • Send Parameters With the Request - lze posílat spolu s http požadavkem (např. hodnoty HTML formuláře či argumenty skriptu) • Filename – jméno souboru (např. a\b\c\file.txt) • Value for “name” attribute – hodnota “name” webového požadavku (file.txt) • MIME Type – např. text/plain • Retrieve All Embedded Resources from HTML Files – JMeter parsuje HTML soubor a posílá HTTP/HTTPS požadavky na odkazované obrázky, Java applety, JavaScript soubory, CSS soubory, atd. • Use as Monitor – pro použití s Monitor Result posluchačem. • Embedded URLs must match – regulární výraz, kterému musí odpovídat URL adresy. Obr. 35 – Rozhraní pro nastavení elementu HTTP Request - 70 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Posluchače (Listeners) Slouží k zachycení a prezentaci výsledků měření. Mohou být umístěny kdekoli ve stromu. Ale budou zachytávat pouze údaje ze vzorkovačů na nebo pod jejich úrovní. Další schopností posluchačů je ukládání naměřených hodnot do souboru. Standardně se ukládají do XML souborů s příponou .jtl. Jiný možný formát uložení dat je CSV (Comma Separated Values – hodnoty oddělené čárkou). Posluchačů je velké množství, popíšeme tedy pouze ty, které v testech používáme. View Results Tree Zobrazuje strom všech odpovědí serveru. Dokáže zobrazit jak požadavek generovaný vzorkovačem, tak i složit HTML stránku z odpovědi serveru nebo ji zobrazit textově (viz Obr. 36). My ho používáme zejména k ladění testu. Při spouštění testu ho vyřazujeme ze stromu (ušetříme tak zdroje počítače). Obr. 36 - Zobrazení view resutls tree Aggregate Report Zobrazuje tabulku kde v řádcích jsou hodnoty pro každý pojmenovaný vzorkovač (viz Obr. 37). Zobrazuje sloupce: • Label – Název vzorkovače. • # Samples – Počet generovaných požadavků. • Average – Průměrná odezva. • Median – Medián odezvy. • 90% Line – Maximální odezva pro 90 % nejrychlejších požadavků. • Min – Minimální odezva požadavku. • Max - Maximální odezva požadavku. • Error % - Procento chyb. - 71 - Ladění databáze systému digitálního archivu SAFE • Throughput – Propustnost v počtu za sekundu/minutu/hodinu • Kb/sec – Propustnost v KB za sekundu Tomáš Pobuda Obr. 37 - Zobrazení aggregate report Konfigurační elementy (Configuration elements) Jsou těsně spjaty se vzorkovači. Lze jimi nastavovat jejich společné vlastnosti. Například pokud v testu používáme 20 HTTP Request vzorkovačů, pak je výhodné nastavit na jednom místě “Server Name or IP” parametr. Konfigurační element ovlivňuje vzorkovače na stejné nebo nižší úrovni. Přičemž vyšší prioritu mají elementy, které jsou v hierarchii blíže k vzorkovači. Pro naše účely budeme používat konfigurační elementy: HTTP Cookie Manager Tento element má dvě funkce. Jednak ukládá cookies jako to dělá prohlížeč. To znamená, že pokud odpověď na HTTP požadavek obsahuje cookie, pak jí HTTP Cookie Manager automaticky uloží a použije ji pro další požadavky. Za druhé můžeme ručně přidat cookie do Cookie Mangeru. My ho používáme v režimu compatibility (viz Obr. 38). Obr. 38 - HTTP Cookie Manager - 72 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Logické kontroléry (Logical controllers) Logickými kontroléry lze upravovat logiku, kterou JMeter používá při posílání požadavků. Lze jimi nastavit pořadí, opakování i upravovat požadavky, které jsou jejich potomky. Logické kontroléry mohou mít za potomky: vzorkovače, konfigurační elementy a jiné logické kontroléry. Simple controller Slouží především pro organizování vzorkovačů a jiných logických kontrolérů. Sám o sobě žádnou funkcionalitu nemá (viz Obr. 39). Obr. 39 - Simple controller Loop controller Tento kontrolér opakuje požadavky, které jsou jeho potomky. Lze nastavit počet opakování nebo opakování do nekonečna (Forever) (viz Obr. 40). Obr. 40 - Loop controller Interleave controller Při každém průchodu stromem vybere jednoho svého potomka a toho vykoná. Takto postupně vybírá všechny potomky (při dalších průchodech). Pokud má za potomky jiné kontrolery, pak je možné nastavit žaškrtávacím políčkem, aby z nich vždy vykonal pouze jeden požadavek (viz Obr. 41). Obr. 41 - Interleave controller Časovače (Timers) Při výchozím nastavení posílá JMeter požadavky bez jakékoli prodlevy. To neodpovídá chování uživatele a s velkou pravděpodobností může test bez časovačů zaplavit server požadavky a tak ho ochromit. Doporučuje se tedy časovače nastavit. Gaussian Random Timer Slouží ke generování náhodných prodlev mezi požadavky. Stanovíme si odchylku (Deviation) a pevný čas (Constant Delay Offset) (viz Obr. 42). - 73 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Obr. 42 - Gaussian Random Timer Post-procesory (Post-Processors) Jsou to elementy, které provedou nějakou akci, potom co je potom co je proveden požadavek vzorkovače. Pokud je post-procesor potomkem vzorkovače, pak se vykoná okamžitě po provedení požadavku. Nejčastěji jsou post-procesory využívány ke zpracování odpovědi serveru (např. získání hodnot z html stránky). Regular Expression Extractor Umožňuje získávat hodnoty z odpovědí serveru použitím regulárních výrazů. Získanou hodnotu pak uloží do proměnné. Použití si vysvětlíme na příkladu. Představme si, že nám sever vrátí stránku kde je vysledek vyhledávání v řádcích. Na konci každého řádku je zaškrtávací políčko (checkbox). Jeho zápis v HTML je: <input type="checkbox" name="multiboxArray" value="12345" /> My chceme získat hodnotu id dokumentu, která je v atributu value. Hodnotu value nahradíme regulárním výrazem ([0-9]+) („[0-9]“ - všechna čísla; „+“ - shoduje se jednou a více). Tak najdeme všechna čísla v hodnotách atrubutu value elementu HTML input (viz ). Nastavit lze tyto parametry: • Name – Jméno elementu. • Response Field to check – Jaká část odpovědi serveru se má zpracovat. • Reference Name – Jméno proměnné kam se uloží výsledek. • Regular Expression – Výraz podle kterého se zpracuje odpověď serveru. • Template - $1$ znamená, že se vybere hodnota rebulárního výrazu v závorkách „()“ • Match No. – Jaká hodnota, získaná zpracováním odpovědi serveru se má uložit do proměnné. „0“ znamená náhodný výběr. • Default Value – Pokud je výsledek zpracování odpovědi serveru prázdný. Pak se použije tato hodnota. Obr. 43 - Regular Expression Extractor - 74 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Funkce Funkce v JMeteru jsou zvláštní hodnoty, které mohou být v polích každého vzorkovače nebo jiného elementu ve stromu. Obecný zápis funkce vypadá takto: ${__JménoFunkce(proměná1,proměná2,proměná3)} Random Tato funkce vrací náhodné číslo z rozsahu, který si definujeme a ukládá ho do proměnné, jejíž jméno si též určíme. Příkladem může být zápis ${__Random(10000000,19999999,ra_ean)}. Tato funkce bude vracet čísla z rozsahu 10000000 – 19999999 a bude je ukládat do proměnné ra_ean na kterou se pak můžeme odkazovat zápisem ${ra_ean} StringFromFile Funkce StringFromFile může být použita pro čtení textových řetězců ze souboru. Pokaždé když je zavolána, přečte další řádku z textového souboru. Když je dosaženo konce souboru, začne číst textové řetězce zase od začátku. 4.2.2 Testovací scénáře V této kapitole popíšeme testovací scénáře, které pak budeme používat k simulaci zátěže uživatelů či k naplnění databáze digitálního archivu SAFE daty v dalších kapitolách. U každého testovacího scénáře popíšeme jeho účel a logickou strukturu a také jak je realizován v testovacím nástroji JMeter. 4.2.2.1 TEST1: Reprezentativní zátěž systému Tento testovací scénář se snaží o simulaci práce uživatelů se systémem SAFE XY. V systému pracuje reálně několik typů uživatelů (viz Tab. 28). V testu tak musíme zohlednit práci všech těchto rolí uživatelů a přiblížit se tak reálné zátěži. Tab. 28 – Typy uživatelů Role uživatele supervisor (účetní) schvalovatel čtenář Typická činnost zakládá faktury schvaluje faktury vyhledává faktury Proces zpracování faktur V reálném provozu je proces zpracování faktury složitější. Schvalovatelé si předávají faktury mezi sebou, případně i účetní a proces se může vracet do různých stavů. Pro testovací účely zjednodušíme tento proces a budeme používat čtyři podpisy (popsané v kapitole Popis testovacího systému SAFE): 1. Účetní se přihlásí, klikne na záložku Faktury a vybere volbu Založit fakturu přijatou. Po té vyplní vlastnosti faktury a uloží ji. 2. Účetní klikne na záložku Moje faktury a vybere složku Moje faktury NOVÉ. Zde vybere jednu fakturu. Zobrazí si stránku Průvodka a vytvoří podpis Předat správu faktury (předá schvalovateli). Odhlásí se. 3. Schvalovatel se přihlásí klikne na složku Moje Faktury Nové a vybere jednu fakturu. Na této faktuře si zobrazí stránku Průvodka a vytvoří podpis Potvrdit schválení. Buď klikne na záložku Moje Faktury a vybere složku Moje Faktury k ZAÚČTOVÁNÍ. Zde vybere jednu fakturu. Zobrazí si stránku Průvodka a vytvoří podpis Zaúčtováno. Nebo klikne na záložku Moje Faktury a vybere složku Moje Faktury k PROPLACENÍ. Zde vybere jednu fakturu. Zobrazí si stránku Průvodka a vytvoří podpis Proplaceno. - 75 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda 4. Čtenář se přihlásí klikne na záložku Faktury a vybere dotaz Přijaté faktury. Zde zvolí nějaké parametry dotazu a spustí vyhledávání. Vrátí se na parametry vyhledávání a zadá jiné. Seřadí si výsledek vyhledávání dle nějakého sloupce. Po té vybere z výsledku vyhledávání jednu fakturu, kterou si zobrazí. Bod 1 představuje vytváření faktur, bod 2 a 3 zpracování faktur a bod 4 vyhledávání faktur. Rozložení uživatelů bude následující: • účetní - 2 • schvalovatel - 3 • čtenář - 10 To přibližně odpovídá rozložení uživatelů u zákazníků. Samozřejmě je to pouze odhad rozložení úloh a u každého zákazníka je to individuální. Budeme předpokládat, že rozložení zátěže odpovídá poměru 2:3:10 (vytváření : zpracování : vyhledávání). Realizace v Jmeter Test je rozdělen na 3 thread group (účetní, schvalovatel, čtenář). Jeho popis je uveden v příloze 1. 4.2.2.2 TEST2: Přidání faktury Tento testovací scénář používáme k vytvoření objektů faktur. Je konstruován tak aby v co nejkratší době vytvořil co nejvíce faktur. Jeho účelem není testování výkonu systému, ale vytvoření faktur v systému, tak abychom simulovali prostředí produkční databáze, která čítá zhruba 100 000 faktur. Tento test je tedy „podpůrným“ testem pro TEST1, který simuluje reálnou zátěž systému. Ke vkládání faktur používáme uživatele Účetní. Ten má pak faktury ve složce Moje faktury NOVÉ. Vkládání faktur: 1. Uživatel účetní se přihlásí 2. Vytvoří draft faktury a vyplní její vlastnosti. 3. Uloží fakturu. 4. Odhlásí se Aby nebyl systém zbytečně zatěžován přihlašováním a odhlašováním uživatelů, tak se kroky 2 a 3 opakují stokrát a pak se pokračuje krokem 4. Realizace v JMeter Popis stromu testu je uveden v příloze 2. 4.2.2.3 TEST3: Přidání objektu adresáře Jako předchozí testovací scénář je tento také „podpůrným“ testem pro TEST1 i pro TEST2. Tento test přidá do adresáře sytému SAFE XY 100 firem. Ty budou použity jako dodavatelé na fakturách. Bude tak zajištěna vyšší realističnost vkládaných dat. Realizace v JMeter Popis stromu testu je uveden v příloze 3 4.2.2.4 TEST4: Přidání faktury se souborem Tento testovací scénář je využit v kapitole 4.4. Vychází z TESTU2. Liší se v přidání souboru faktury. Realizace v JMeter Popis stromu testu je uveden v příloze 4. - 76 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda 4.3 Nastavení databáze pro optimální výkon Cílem této kapitoly je popsat nastavení konkrétní databáze, tak aby podávala optimální výkon. K tomu bude využita teorie popsaná v kapitole Optimalizace výkonu databáze. Nejprve nastavíme parametry databáze, poté budeme konfigurovat paměť a nakonec popíšeme nastavení I/O. Ještě před samotným popisem nastavení databáze si popíšeme prostředky (hardware a software) používané pro účely ladění a testování databáze digitálního archivu SAFE. Tab. 29 - Databázový server Databázový server Operační systém CPU RAM Software Microsoft Windows Enterprise 2x Intel Xeon 3,4 GHz 4GB Oracle 11g Tab. 30 - Aplikační server Aplikační server Operační systém CPU RAM Software Microsoft Windows Server 2003 2x Intel Xeon 2,8 GHz 3 GB Apache Tomcat Digitální archiv SAFE 4.3.1 Základní nastavení databáze Před tím než začneme používat databázi, nastavíme nejdůležitější parametry databáze (viz Tab. 31). Toto nastavení provedeme pomocí Enterprise Manager. Přihlásíme se jako uživatel SYS. Klikneme na záložku server a zde na nastavení inicializačních parametrů (Initialization Paramaters). Tím si zobrazíme stránku se všemi inicializačními parametry (viz - 77 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Obr. 44). Po nastavení parametrů na požadované hodnoty stiskneme tlačítko Save to File. Poté restartujeme databázový systém. Tab. 31 - Nastavení inicializačních parametrů Parametr COMPATIBLE DB_BLOCK_SIZE MEMORY_TARGET PROCESSES SESSIONS UNDO_MANAGEMENT UNDO_TABLESPACE Hodnota 11.1.0.0.0 8192 800 150 necháme prázdný AUTO UNDOTBS1 - 78 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Obr. 44 - Stránka s parametry (nastavení parametru memory_target) Nastavení velikosti souborů Redo logů Potom co jsme nastavili nejdůležitější parametry, nastavíme velikost redo logů. Jelikož by se nám špatně odhadoval počet bloků redo log souboru, kterém se má provést checkpoint (parametr FAST_START_MTTR_TARGET), odhadneme dostačující velikost redo log souboru na 51 200 KB. Velikost redo logů ověříme tak, že spustíme TEST1 a budeme sledovat v enterprise manageru (záložka server – Redo Log Groups), jestli se změní redo log group dříve než za 20 min. Stačí si zapamatovat číslo Sequence ( číslo posloupnosti) u skupiny, která je current a po dvaceti minutách podívat na to která skupina redo logů je aktivní a jaké má číslo Sequence. Spustíme zátěž systému použitím TEST1 a budeme sledovat, jestli se skupina přepne dříve než za 20 min. Po asi 30 minutách nenastal switch redo log skupiny. To znamená, že velikost souborů redo logů je dostačující a nebude negativně ovlivňovat výkon. Obr. 45 - Redo log group v EM Nastavení temporary tablespace Dle doporučení z kapitoly 3.4.1 necháme nastavení na výchozích hodnotách: Extent management – Local, UNIFORM 1MB Segment space management - Automatic Nastavení tablespace pro SAFE Vytvoříme tablespace pro aplikaci SAFE a nastavíme jeho parametry: • Klikneme na záložku server a zde vybereme položku Tablespaces. Zobrazí se stránka se seznamem tablespaců. • Klikneme na tlačítko Create. • Vyplníme parametry: - 79 - Ladění databáze systému digitálního archivu SAFE • Tomáš Pobuda o Name: USERS2 o přidáme soubor tlačítkem Add (nastavíme jméno, cestu a počáteční velikost) o Na záložce Storage nastavíme Extent management a Segment space management na Automatic. Klikneme na OK a tablespace se vytvoří a je zobrazena stránka s nastaveními tablespace (viz Obr. 46) Obr. 46 - Zobrazení detailu nastavení tablespace 4.3.2 Nastavení paměti databáze Než začneme nastavovat paměť. Spustíme na hodinu TEST1 a zaznamenáme si výstup z Aggregate Report (viz Příloha 8.6). Až dokončíme nastavení paměti ručně, budeme moci porovnat, jestli byl výkon lepší při Automatické správě paměti, nebo při ručním nastavení. 4.3.2.1 Ruční nastavení paměťových prostorů Předpokládejme, že máme k dispozici 800 MB paměti(tak jako automatická správa), kterou můžeme rozdělit mezi paměťové prostory. Počáteční nastavení paměťových prostorů, tak jak byly nastaveny automatickou správou paměti jsou uvedena v tabulce. Paměťový prostor Buffer cache Shared pool Large pool Java pool Ostatní Aggregate PGA target Parametr DB_CACHE_SIZE SHARED_POOL_SIZE LARGE_POOL_SIZE JAVA_POOL_SIZE Velikost 188 MB 304 MB 4 MB 12 MB 8 MB PGA_AGGREGATE_TARGET 288 MB SGA 512 MB Celkem 800 MB Nejdříve nasbíráme statistiky o paměťových prostorech a poté rozhodneme o změnách ve velikostech těchto prostorů. Postup jak jednotlivé statistiky získat a jejich interpretaci najdeme v kapitole 3.4.3. - 80 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Sběr statistik – Buffer cache Jak bylo popsáno v kapitole 3.4.3.1, podíváme se na výstup z pohledu V$DB_CACHE_ADVICE a vypočítáme buffer cache hit ratio. pohled - V$DB_CACHE_ADVICE Cache Buffers Estd Phys Read Factor Size (MB) 16 1992 10,5628 32 3984 5,445 48 5976 2,9531 64 7968 2,0766 80 9960 1,458 96 11952 1,3608 112 13944 1,2734 128 15936 1,1941 144 17928 1,1231 160 19920 1,0606 176 21912 1,0229 188 23406 1 192 23904 0,989 208 25896 0,9555 224 27888 0,9229 240 29880 0,8919 256 31872 0,8555 272 33864 0,814 288 35856 0,7637 304 37848 0,6936 320 39840 0,5883 Estd Phys Reads 27433849 14141901 7669778 5393289 3786780 3534276 3307386 3101378 2916825 2754595 2656693 2597212 2568677 2481656 2396931 2316581 2221983 2114195 1983511 1801484 1527920 Buffer cache hit ratio vypočítáme z dat z pohledu V$SYSSTAT (viz Tab. 32). Tab. 32 - Výstup z pohledu V$SYSSTAT a hit ratio NAME db block gets from cache consistent gets from cache physical reads cache buffer cache hit ratio VALUE 144303002 512063613 2626338 100% Vzhledem k tomu že je buffer cache hit ratio 100% je paměť 188 MB dostačující. Její zvětšení by přineslo menší počet čtení z disku. - 81 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Statistiky – Shared pool pohled - V$SHARED_POOL_ADVICE SHARED_PO OL_SIZE_FOR _ESTIMATE SHARED_P OOL_SIZE_ FACTOR ESTD _LC_ SIZE ESTD_LC_ MEMORY_ OBJECTS ESTD_L C_TIME _SAVED ESTD_LC_T IME_SAVE D_FACTOR ESTD_L C_LOA D_TIME ESTD_LC_L OAD_TIME _FACTOR ESTD_LC_M EMORY_OBJ ECT_HITS 176 208 240 272 304 336 368 400 432 464 496 528 560 592 624 0,5789 0,6842 0,7895 0,8947 1 1,1053 1,2105 1,3158 1,4211 1,5263 1,6316 1,7368 1,8421 1,9474 2,0526 17 49 81 113 145 177 209 241 273 305 337 369 401 433 465 2717 5857 7678 9577 11347 13025 14686 16326 17951 19620 21447 23368 25085 26451 27739 5798 5861 6684 7347 7371 7376 7377 7378 7380 7381 7381 7382 7382 7384 7384 0,7866 0,7951 0,9068 0,9967 1 1,0007 1,0008 1,0009 1,0012 1,0014 1,0014 1,0015 1,0015 1,0018 1,0018 2313 2250 1427 764 740 735 734 733 731 730 730 729 729 727 727 3,1257 3,0405 1,9284 1,0324 1 0,9932 0,9919 0,9905 0,9878 0,9865 0,9865 0,9851 0,9851 0,9824 0,9824 324104 597907 601952 603103 603755 604037 604188 604349 604548 604696 604749 604779 604963 605172 605265 Library cache pohled - V$LIBRARYCACHE NAMESPACE PINS BODY 12308 CLUSTER 505 INDEX 61 JAVA DATA 873 JAVA RESOURCE 0 JAVA SOURCE 0 OBJECT 0 PIPE 0 SQL AREA 265064 TABLE/PROCEDURE 354287 TRIGGER 2199 PINHITS 11375 496 0 867 0 0 0 0 217239 345236 2007 RELOADS 11 1 0 0 0 0 0 0 377 1532 0 INVALIDATIONS 0 0 0 0 0 0 0 0 150 0 0 Library cache hit ratio SUM(PINHITS)/SUM(PINS) 0,908 Ze statistik library cache vidíme, že v SQL AREA dochází k mnoha opětovným překladům a zneplatněním. Pokusíme se to eliminovat zvětšením paměti. - 82 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Dictionary cache pohled - V$ROWCACHE PARAMETER SUM(GETS) SUM(GETMISSES) PCT_SUCC_GETS UPDATES dc_tablespaces 3276177 9 100,0 0 dc_tablespace_quotas 1 1 0,0 1 dc_awr_control 96 1 99,0 4 dc_object_grants 1506 98 93,5 0 dc_histogram_data 479907 2652 99,4 0 dc_rollback_segments 1105 21 98,1 31 dc_sequences 50 13 74,0 50 dc_segments 685093 2021 99,7 10 dc_objects 2585729 5196 99,8 133 dc_database_links 189 1 99,5 0 dc_histogram_defs 1170423 7070 99,4 8 dc_users 3541057 102 100,0 0 outstanding_alerts 59 9 84,7 2 dc_files 42 6 85,7 0 dc_global_oids 10219 188 98,2 0 dc_profiles 216 2 99,1 0 global database name 3136 1 100,0 0 Celkové dictionary cache hit ratio = 0,99 Dle celkového hit ratio dictionary cache se zdá, že není potřeba zvětšovat tuto paměť. Result cache pohled - V$_RESULT_CACHE_STATISTICS NAME VALUE Block Size (Bytes) 1024 Block Count Maximum 2624 Block Count Current 0 Result Size Maximum (Blocks) 131 Create Count Success 0 Create Count Failure 0 Find Count 0 Invalidation Count 0 Delete Count Invalid 0 Delete Count Valid 0 Dobrým znakem je, že hodnoty Create Count Failure a Delete Count Valid rovné nule. Špatným znakem je, že se result cache nevyužívá, jelikož hodnota Create Count Success je rovná nule. Statistiky - Redo log buffer pohled - V$SYSSTAT NAME redo buffer allocation retries VALUE 0 Když je tato statistika blízko nule, pak je velikost redo log buffer dostačující. Vzhledem k tomu, že je nastaven na více než 5 MB, zdá se že je plýtváno pamětí. Mohl by být snížen. - 83 - Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Statistiky - PGA paměti pohled - V$PGASTAT NAME aggregate PGA target parameter aggregate PGA auto target global memory bound total PGA inuse total PGA allocated maximum PGA allocated total freeable PGA memory process count max processes count PGA memory freed back to OS total PGA used for auto workareas maximum PGA used for auto workareas total PGA used for manual workareas maximum PGA used for manual workareas over allocation count bytes processed extra bytes read/written cache hit percentage VALUE 301989888 222160896 60397568 55090176 86758400 110872576 0 44 47 0 0 19378176 0 0 0 12769409024 0 100 - 84 - UNIT bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes bytes percent Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda pohled - V$PROCESS PSEUDO ORACLE.EXE (PMON) ORACLE.EXE (VKTM) ORACLE.EXE (DIAG) ORACLE.EXE (DBRM) ORACLE.EXE (PSP0) ORACLE.EXE (MMAN) ORACLE.EXE (DIA0) ORACLE.EXE (DBW0) ORACLE.EXE (LGWR) ORACLE.EXE (CKPT) ORACLE.EXE (SMON) ORACLE.EXE (RECO) ORACLE.EXE (MMON) ORACLE.EXE (MMNL) ORACLE.EXE (D000) ORACLE.EXE (S000) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (FBDA) ORACLE.EXE (SMCO) ORACLE.EXE (QMNC) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (q000) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (q001) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (CJQ0) ORACLE.EXE (SHAD) ORACLE.EXE (W000) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) ORACLE.EXE (SHAD) PGA_USED_MEM 0 437878 437078 433902 510242 437078 438278 467378 2309906 4662438 482514 968562 642054 1733138 507834 712777 266489 2200673 701146 1139210 434922 506734 1187954 2309954 1283113 768618 1296833 2192589 1914041 1848549 1688989 2970489 675274 701146 1499642 2038034 1204137 929458 696982 602114 7010722 701146 701146 PGA_ALLOC_MEM 0 716366 716366 716366 781902 716366 716366 830410 4067042 9629262 1002818 2223694 912974 2403274 781902 912974 454222 2616910 1691098 1747914 716366 781902 1568334 2936282 1502798 1240654 1502798 2420302 2223694 2289230 1830478 4779598 978510 1822170 2084314 2616910 1633870 1240654 1691098 847438 13601622 839130 839130 PGA_FREEABLE_MEM 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PGA_MAX_MEM 0 716366 716366 716366 781902 716366 716366 1223626 4067042 10546766 1002818 3599950 912974 3910602 781902 1437262 519758 32173646 21941722 1878986 716366 781902 10088014 7327194 3272270 1568334 1961550 3198426 3984858 3919322 2813518 11176790 978510 21876186 2543066 3862094 4910670 7007822 4247002 847438 23366486 6868442 6999514 pohled - V$SQL_WORKAREA_HISTOGRAM LOW_KB HIGH_KB 2 64 128 256 512 1024 2048 4096 8192 4 128 256 512 1024 2048 4096 8192 16384 OPTIMAL_EXECUTIONS ONEPASS_EXECUTIONS MULTIPASSES_EXECUTIONS 32506 154 278 161 5203 2220 654 196 194 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Jak je vidět z dat, tak jsou všechny dotazy zpracovány optimálně. Velikost paměti PGA je tedy buď dobře nastavena nebo je předimenzována a mohla by být zmenšena. Podívejme se na další statistiky. - 85 - Ladění databáze systému digitálního archivu SAFE V$PGA_TARGET_ADVICE TARGET_MB CACHE_HIT_PERC 36 75 72 98 144 100 216 100 288 100 346 100 403 100 461 100 518 100 576 100 864 100 1152 100 1728 100 2304 100 Tomáš Pobuda ESTD_OVERALLOC_COUNT 272 0 0 0 0 0 0 0 0 0 0 0 0 0 Dle statistik PGA paměti se zdá, že je předimenzována. I při velikosti PGA paměti 144 MB je odhadováno, že pokud bude hledán nějaký objekt v cache, tak bude na 100 % nalezen. Podívejme se ještě jaký je odhad rozložení zpracování SQL dotazů, jestliže bychom snížily PGA paměť o polovinu, tedy na 144 MB. pohled - V$PGA_TARGET_ADVICE_HISTOGRAM LOW_KB HIGH_KB 2 64 128 256 512 1024 2048 4096 8192 32768 4 128 256 512 1024 2048 4096 8192 16384 65536 ESTD_OPTIMAL_CNT ESTD_ONEPASS_CNT ESTD_MPASS_CNT 216953 338 294 239 23125 2565 958 196 194 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 I tato statistika ukazuje, že při snížení velikosti paměti PGA na 144 MB by to nemělo mít negativní vliv na zpracování dotazů. Odhaduje se, že pouze dva dotazy budou zpracovány jednoprůchodově. Nastavení parametrů Z nasbíraných statistik můžeme rozhodnout o změnách velikostí paměťových prostorů. Paměť PGA snížíme na 144 MB. Tím získáme volných 144 MB do našeho „rozpočtu“ 800 MB. Ty přidělíme paměťovému prostoru shared pool. Zejména jeho složka Library cache vykazuje známky potřeby zvětšení jejího paměťového prostoru. Parametry nastavíme takto: Paměťový prostor Buffer cache Shared pool Large pool Java pool Ostatní Aggregate PGA target Parametr DB_CACHE_SIZE SHARED_POOL_SIZE LARGE_POOL_SIZE JAVA_POOL_SIZE 188 MB 448 MB 4 MB 12 MB 8 MB PGA_AGGREGATE_TARGET 144 MB - 86 - Velikost SGA 656 MB Celkem 800 MB Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Nyní restartujeme databázi a spustíme na hodinu zátěž systému. K tomu použijeme TEST1. Po skončení testu si uložíme výstup z Aggregate Report (viz přílohu 8.6). Srovnání automatického a manuálního nastavení Po zvýšení paměti shared pool na úkor paměti PGA se celkově výkon databáze mírně zlepšil. Je to vidět z tabulky se srovnáními v příloze 8.6. Medián odezvy se snížil z 906 ms na 828 ms a odezva 90% nejrychlejších požadavků je snížila z 2375 ms na 2063 ms. Podívejme se nyní na jednotlivé požadavky a jejich odezvy u 90% nejrychlejších. U některých došlo ke zkrácení doby odezvy a u jiných k prodloužení. Významná prodloužení či zkrácení doby odezvy je vyznačeno tučně. Významná zkrácení odezvy u 90% Line Došlo k němu zejména u „běžných zobrazení“, jako jsou Návrat na parametry, Odhlášení, Podpis Potvrdit schválení či Podpis zaúčtováno, při kterých nejsou na server odesílány parametry pro dotaz či vytvoření objektu. Zvětšením Shared pool paměťového prostoru se vešlo více dotazů v parsovaném stavu do paměti a tak mohly být rychleji zpracovány. Významná prodloužení doby odezvy 90% Line Došlo k němu zejména u požadavků „editace podpisu ...“, při kterých se podpisy ukládají. To znamená, že se vytváří objekty podpisů a mění se nějaké vlastnosti podepisované faktury. Snížením velikosti paměti PGA měly procesy k dispozici méně paměti a tak trvalo déle vkládání a modifikace objektů. Potom co jsme dokončily analýzu změn odezvy bychom znovu nasbíraly statistiky pro jednotlivé paměťové prostory a snažili bychom se dále vylepšit nastavení paměti. My jsme provedli jednu iteraci z mnoha možných. To je pro rozsah této práce dostačující. Jak je vidět, nastavení paměti je náročné na čas (nastavení parametrů, spuštění testů, sběr a interpretace statistik). Otázkou je jakého zlepšení výkonu by se nám podařilo dosáhnout. V naší situaci, kdy máme pouze jeden typ zátěže databáze, je nastavení paměti jednodušší než v realitě, kde můžou existovat různě rozložené zátěže. Potom bychom museli znovu paměť ladit, jakmile by taková situace nastala. Doporučení Oracle používat automatickou správu paměti je tedy opodstatněné. K ručnímu nastavení paměti bychom se měli uchylovat pouze při dokonalé znalosti zátěže databáze a toho jaké paměťové prostory nejvíce využívá. 4.3.3 Nastavení I/O Před tím než začneme konfigurovat I/O subsytém spustíme kalibraci a zjistíme jestli je I/O dostatečně rychlé. • Před tím než spustíme konfiguraci zkontrolujeme následující nastavení: • parametr timed_statistics nastaven na TRUE • parametr filesystemio_options nastaven na SETALL • zkontrolujeme povolení asynchronního I/O pro datové soubory (viz Tab. 33) Tab. 33 - povolení asynchronního I/O pro soubory NAME C:\ORACLE\ORADATA\OITZ\SYSTEM01.DBF C:\ORACLE\ORADATA\OITZ\SYSAUX01.DBF C:\ORACLE\ORADATA\OITZ\UNDOTBS01.DBF C:\ORACLE\ORADATA\OITZ\USERS01.DBF C:\ORACLE\ORADATA\OITZ\USERS2_01.DBF C:\ORACLE\ORADATA\OITZ\USERS3.DBF - 87 - ASYNCH_IO ASYNC_ON ASYNC_ON ASYNC_ON ASYNC_ON ASYNC_ON ASYNC_ON Ladění databáze systému digitálního archivu SAFE Tomáš Pobuda Po kontrole nezbytných nastavení spustíme kalibraci příkazem popsaným v kapitole 3.4.4.1 (počet disků 1). Po skončení kalibrace se podíváme do tabulky DBA_RSRC_IO_CALIBRATE na výsledky (viz Tab. 34) Tab. 34 - Výsledek kalibrace – tabulka DBA_RSRC_IO_CALIBRATE START_TIME END_TIME MAX_IOPS MAX_MBPS LATENCY NUM_PHYSICAL_DISKS 57:22,1 01:52,8 431 82 5 1 Latence (zpoždění) je 5 ms, maximální IOPS 431 požadavků za sekundu a maximální MBPS 82 MB/sec. jsou dostačující hodnoty pro naši databázi. Nebudeme tedy rozdělovat soubory na více disků. 4.4 Ukládání souborů digitálního archivu Cílem tohoto testu je rozhodnout, jestli je rychlejší vkládání souborů faktur do databáze Oracle nebo do souborového systému (FS). K tomu využijeme testovací scénář TEST4, který vkládá faktury se souborem (obrázkem). Dále máme připraveny obrázky velikostí 50 KB, 500 KB, 1 MB, 5 MB a 10 MB které budeme testovacím scénářem vkládat. Nejdříve nastavíme systém, tak aby vkládal soubory do databáze. Poté spustíme pětkrát TEST4 (50 KB, 500 KB, 1 MB, 5 MB, 10 MB) a uložíme si data z Aggregate Report (viz 8.7) Nyní nastavíme systém, tak aby soubory ukládal na disk serveru, kde je umístěna databáze Oracle. Znovu spustíme TEST4 pro všechny velikosti souborů a uložíme si data z Aggregate Report (viz 8.7) Porovnání výsledků Z nasbíraných dat vytvoříme grafy závislosti doby odezvy na velikosti souboru(viz příloha 8.8). Pro porovnání obou situací použijeme medián odezvy pro uživatele. Jak je vidět z grafů i z dat (viz 8.7), tak při vkládání faktur se soubory o velikostech 50 KB a 500 KB jsou obě nastavení srovnatelně rychlá. Při vkládání faktur se soubory 1 MB, 5 MB a 10 MB je rychlejší ukládání na souborový sytém. Z grafů je též vidět stoupající trend odezvy při zvětšování velikosti souboru. Při nastavení ukládání do databáze je trend strmější a při ukládání na souborový systém mírnější. - 88 - Závěr Tomáš Pobuda 5 Závěr Cílem práce bylo prozkoumat a vyzkoušet možnosti ladění databáze Oracle, která je používána digitálním archivem SAFE. Tyto možnosti pak vyzkoušet prakticky a zjistit jak různá nastavení ovlivňují výkon systému. Dalším cílem bylo zjistit, jestli je rychlejší soubory digitálního archivu SAFE ukládat do databáze nebo na souborový systém. V kapitole 2 jsme popsali faktory, které ovlivňují výkon databázových systémů. Tím jsme čtenáře uvedli do problematiky ladění databází a zároveň jsme vymezili co bude náplní této práce. Tedy především nastavování parametrů databáze. Popisem možností ladění databáze Oracle se zabývá v kapitola 3. V prvních třech podkapitolách se zabýváme novinkami v ladění systému Oracle. Dále také metodou The Oracle Performance Improvement Method, což je doporučený postup ladění databáze od společnosti Oracle. A naposled popisem nástrojů pro ladění databáze, které jsou dostupné ve verzi Oracle 11.1. Nejvíce prostoru je věnováno správnému nastavení parametrů databáze. To je popsáno v kapitole 3.4. Při nastavení některých parametrů je dobré se držet rad uvedených v dokumentaci Oracle a popsaných v této kapitole. Některé parametry však vyžadují pro správné nastavení další informace. Těmito informacemi jsou statistiky. Ty jsou sbírány a udržovány nástrojem AWR. Analýzou těchto statistik je pak možné rozhodnout o správné hodnotě daného parametru. V poslední podkapitole popisujeme využití nástrojů SQL Tuning Advisor a SQL Access Advisor pro automatické ladění SQL příkazů. Tím byl splněn cíl, prozkoumat možnosti ladění databáze Oracle. V další části, tedy v kapitole 4, nejprve popisujeme systém SAFE a implementaci systému, na které pak provádíme testy a ladíme jeho databázi. Abychom mohli ladit databázi systému SAFE, museli jsme vybrat vhodný testovací nástroj pro generování HTTP požadavků (kap. 4.2). Nejprve jsme zmapovali oblast testovacích nástrojů a vybrali dva, které splňovali základní kritéria (generování HTTP požadavků). Poté jsme definovali další kritéria, dle kterých jsme vybrali testovací nástroj Apache JMETER. Pomocí tohoto nástroje jsme vytvořily potřebné testovací scénáře pro generování zátěže. Ty jsou popsány v kapitole 4.2.2. Po vytvoření testovacích scénářů jsme mohli přikročit k ladění databáze popsané v kapitole 4.3. Nejprve jsme nastavili inicializační parametry, dle doporučení uvedených v kapitole 3.4.1. Poté jsme se zabývali nastavením paměti databáze. Jako první jsme vyzkoušeli Automatickou správu paměti. Spustili jsme testovací scénář simulující reálnou zátěž (TEST1) a zaznamenali si výkon. Pak jsme provedli sběr statistik a jejich analýzou rozhodli o ručním nastavení paměťových prostorů databáze. Poté jsme znovu spustily TEST1 a zaznamenali si výkon. Porovnáním údajů jsme zjistily, že výkon se při ručním nastavení mírně zlepšil. Pokud předpokládáme, že zátěž generovaná testovacím scénářem TEST1 je blízká reálné zátěži většiny systémů. Můžeme doporučit snížit paměť PGA a takto získanou paměť rozdělit mezi paměťové prostory SGA, zejména Shared pool. Tím byl splněn cíl vyzkoušet, jak nastavení parametrů ovlivňuje výkon sytému. Jako poslední v kapitole 4.3 jsme provedli kalibraci I/O, která ukázala, že I/O není prvkem, který databázi brzdí, a tak jsme I/O dále nekonfigurovali. Jelikož by to nepřineslo žádné zlepšení výkonu systému. V kapitole 4.4 jsme se zabývali otázkou rychlosti ukládání souborů digitálního archivu SAFE do databáze a na souborový systém. Pro tuto kapitolu byl vytvořen testovací scénář TEST4, který vkládá do systému objekty se soubory (obrázky). Provedli jsme postupně vkládání souborů o velikosti 50 KB, 500 KB, 1 MB, 5 MB a 10 MB jak na souborový systém tak do databáze. Výsledky těchto testů jsou v příloze 7. Z výsledků je vidět, že vkládání objektů se soubory o velikosti 50 KB a 500 KB je srovnatelně rychlé při obou nastaveních. Vkládání objektů se sobory o velikosti 1 MB, 5 MB a 10 MB je rychlejší při ukládání souborů na souborový systém. Z grafů - 89 - Závěr Tomáš Pobuda v příloze 8 je vidět, že čím je sobor větší, tím je ukládání pomalejší u obou nastavení. Avšak při ukládání souborů na souborový systém se doba uložení souboru zvyšuje o mnoho méně než při ukládání souborů do databáze. To znamená, že pokud zákazník vkládá objekty se soubory do velikosti 500 KB, je možné použít obě nastavení. Pokud však vkládá objekty větší, je lepší použít ukládání souborů na souborový systém. Přínosem práce je zejména vyzkoušení ladění databáze Oracle, kterou využívá digitální archiv SAFE. Spolu s popisem mohou posloužit jako příručka při nastavování databáze Oracle pro použití s digitálním archivem SAFE. Dalším přínosem je zodpovězení otázky, jestli je rychlejší ukládat soubory digitálního archivu SAEF do databáze nebo na souborový systém. Tyto výsledky mohou být použity při rozhodování, kde ukládat soubory v digitálního archivu SAFE v závislosti na analýze velikosti souborů vkládaných objektů zákazníkem. Posledním přínosem jsou testovací scénáře, které jsou využitelné na reálných projektech k testování agendy faktur. - 90 - Literatura Tomáš Pobuda 6 Literatura [KRCH] [HAVLIN] [HYNAR] [JMETER] [KUTAC] [MULLINS] [ORA-2D] [ORA-AG] [ORA-DC] [ORA-PTG] [ORA-REF] [SAFE] KRCH, David. materiály ke cvičením předmětu 4IT340 (Základy správy databázového systému Oracle) na VŠE 2007. Havlín, Jaroslav, Porovnání testovacích nástrojů a technologií pro jednotlivé aplikační vrstvy J2EE aplikací, ČVUT FEL katedra počítačů, srpen 2007. HYNAR, Martin, Nástroje pro platformu Java, Neocortex, 2004, Praha, ISBN – 8086330-16-8 Apache Jakarta Project (Subproject JMeter), User manual [online]. Dostupné z WWW: http://jakarta.apache.org/jmeter/usermanual/index.html KUTÁČ, Daniel, Vyspělé databázové technologie III. – Bitmapové indexy [online], duben 2004. Dostupné z WWW: http://www.dbsvet.cz/view.php?cisloclanku=2004042701 MULLINS,S., Craig, Denormalization Guidelines [online], June 1997. Dostupné z WWW: http://www.tdan.com/view-articles/4142/ Oracle Corporation, Oracle Database 2 Day + Performance Tuning Guide, 11g Release 1 (11.1) [online], Oracle Corporation, červenec 2007. Dostupné z WWW: http://download.oracle.com/docs/cd/B28359_01/server.111/b28275/toc.htm Oracle Corporation, Oracle Database Administrator’s Guide, 11g Release 1 (11.1) [online], Oracle Corporation, říjen 2007. Dostupné z WWW: http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/toc.htm Oracle Corporation, Oracle Database Concepts, 11g Release 1 (11.1) [online], Oracle Corporation, říjen 2007. Dostupné z WWW: http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/toc.htm Oracle Corporation, Oracle Database Performance Tuning Guide 11g Release 1 (11.1) [online], Oracle Corporation, červenec 2007. Dostupné z WWW: http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/toc.htm Oracle Corporation, Oracle Database Reference,11g Release 1 (11.1) [online], Oracle Corporation, červenec 2007. Dostupné z WWW: http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/toc.htm Aip SAFE s.r.o., Příručka administrátora - 91 - Terminologický slovník Tomáš Pobuda 7 Terminologický slovník Termín ACID princip Význam Atomicity, Consistency, Isolation, Durability (atomicita, konzistence, izolace, odolnost). To jsou principy, které garantují spolehlivost transakcí. ADDM (automatic database diagnostic monitor) ANSI (American National Standards Institute) AWR (advaced workload repository) CSV (Comma Separated Values) Data striping Databázový kurzor doc HTTP(Hyper Text Transfer Protocol) I/O operace IP (Internet Protocol) LDAP (Lightweight Directory Access Protocol) LVM (Logical Management) Volume Materializovaný pohled odt [http://en.wikipedia.org/wiki/ACID] Nástroj pro analýzu statistik sbíraných AWR. [ORA-PTG] je americká standardizační organizace, sídlící ve Washingtonu. Celým názvem American National Standards Institute. Je to nezisková organizace, která vytváří průmyslové standardy ve Spojených státech. Je členem organizace ISO a IEC. [http://cs.wikipedia.org/wiki/Ip] Nástroj pro sběr statistik o databázi Oracle. [ORA-PTG] je jednoduchý souborový formát určený pro výměnu tabulkových dat. Soubor ve formátu CSV sestává z řádků, ve kterých jsou jednotlivé položky odděleny znakem čárka (,). [http://cs.wikipedia.org/wiki/CSV] Rozdělení logicky souvislých dat (např. soubor) tak, že jednotlivé části mohou být přiřazeny více diskům. [http://en.wikipedia.org/wiki/Data_striping] Objekt, pomocí kterého je možné ovládat pohyb po výsledku dotazu (po záznamech – řádcích), nejčastěji v rámci příkazu jazyka SQL SELECT. [http://www.dbsvet.cz/view.php?cisloclanku=2004100101] Přípona souborů vytvořených textovým editorem MS WORD. [autor] je internetový protokol určený původně pro výměnu hypertextových dokumentů ve formátu HTML. [http://cs.wikipedia.org/wiki/Http] Vstupní a výstupní operace disků. [autor] je datový protokol používaný pro přenos dat přes paketové sítě. Tvoří základní protokol dnešního Internetu. [http://cs.wikipedia.org/wiki/Internet_Protocol] je definovaný protokol pro ukládání a přístup k datům na adresářovém serveru. Podle tohoto protokolu jsou jednotlivé položky na serveru ukládány formou záznamů a uspořádány do stromové struktury (jako ve skutečné adresářové architektuře). Je vhodný pro udržování adresářů a práci s informacemi o uživatelích (např. pro vyhledávání adres konkrétních uživatelů v příslušných adresářích, resp. databázích). [http://cs.wikipedia.org/wiki/LDAP] Metoda alokace úložného prostoru v operačním systému Linux. Umožňuje spojovat více disků, diskových oddílů, RAID nebo jiných zařízení do logických celků, které lze dále využívat stejně jako klasické oddíly. [http://cs.wikipedia.org/wiki/LVM] Jsou to objekty schéma, které mohou být použity k shrnování, výpočtům, replikaci a distribuci dat. [ORA-DC] Přípona souborů vytvořených textovým editorem OpenOffice.org Writer. [autor] - 92 - Terminologický slovník Tomáš Pobuda Termín pdf RAID (Redundant Array of Independent Disks) RAID5 SQL (Structured Language) Query SQL Profil Transakce txt XML (eXtensible Markup Language) TIFF (Tag Format) Image File Architektura klient / server Význam Přípona souborů vytvořených ve formátu Portable Document Format (Přenosný formát dokumentů) vyvinutý firmou Adobe. [autor] Vícenásobné diskové pole nezávislých disků je typ diskových řadičů, které zabezpečují pomocí určitých speciálních funkcí koordinovanou práci dvou nebo více fyzických diskových jednotek. Zvyšuje se tak výkon a odolnost vůči chybám nebo ztrátě dat. [ http://cs.wikipedia.org/wiki/Raid] Jeden z typů RAID. Výhodou je, že jen jeden disk (i když pokaždé jiný) obsahuje redundantní informace a opět se dá využít paralelního přístupu k diskům, čímž se zkrátí doba odpovědi. Nevýhodou RAID 5 je ale pomalejší zápis. [http://cs.wikipedia.org/wiki/Raid#RAID_5] Standardizovaný dotazovací jazyk používaný pro práci s daty v relačních databázích. [http://cs.wikipedia.org/wiki/SQL] Soubor informací, které umožní optimalizátoru dotazů vytvořit optimální exekuční plán pro daný SQL příkaz. [ORA-PTG] Skupina příkazů, které převedou databázi z jednoho konzistentního stavu do druhého. [http://cs.wikipedia.org/wiki/Datab%C3%A1zov%C3%A1_transakce] Běžná přípona textových souborů. [autor] Obecný značkovací jazyk, který byl vyvinut a standardizován konsorciem W3C. Umožňuje snadné vytváření konkrétních značkovacích jazyků pro různé účely a široké spektrum různých typů dat. [http://cs.wikipedia.org/wiki/XML] Jeden z souborových formátů pro ukládání rastrové počítačové grafiky. Formát TIFF tvoří neoficiální standard pro ukládání snímků určených pro tisk. TIFF je složitější formát oproti jiným formátům pro ukládání rastrové grafiky. Tento formát vytvořila v roce 1986 společnost Aldus. TIFF umožňuje jako jeden z mála grafických formátů vícestránkové soubory a proto se často používá například pro ukládání přijatých faxů přijatých pomocí počítače a ISDN karty či faxmodemové karty. [http://cs.wikipedia.org/wiki/TIFF] Klient-server je síťová architektura, která odděluje klienta (často aplikaci s grafickým uživatelským rozhraním) a server. Jednotlivé instance klientů komunikují se serverem, který obvykle běží na vzdáleném počítači. Klasickou ukázkou může být prohlížení webových stránek, kde webový prohlížeč je klient, který při požadavku uživatele na novou stránku kontaktuje vzdálený server a vyžádá si od něj patřičnou webovou stránku. Server tedy poskytuje služby, které na vyžádání „konzumuje“ klient. [http://cs.wikipedia.org/wiki/Klient-server] - 93 - Terminologický slovník Tomáš Pobuda - 94 - HTTP Request – Klik na uložit Tomáš Pobuda - 95 - HTTP Request – Uložení podpisu Předat správu faktury HTTP Request - Odhlášení HTTP Request – Vytvoření podpisu Předat správu faktury HTTP Request – Přepnutí na stránku průvodka Získání náhodného id faktury z výsledku vyhledávání HTTP Request - Klik na fakturu ve výsledku vyhledávání HTTP Request - Klik na složku Moje faktury NOVÉ HTTP Request - Klik na záložku Moje Faktury Thread group – 2 uživatelé Čárový kód -${__Random(10000000,19999999,ra_ean)} Evidenční číslo - EV - ${__Random(10000000,19999999,ra_evNum)}A dle proměnných deviation, timer Dodavatel – získané id dodavatele ${id_id} HTTP Request - Přihlásí se uživatel účetní Datum vystavení ${__Random(1,28,ra_1)}.${__Random(1,12,ra_2)}.2008 Loop controller Datum účtování HTTP Request - Klik na záložku Faktury ${__Random(${__V(${ra_1})},28,ra_3)}.${__Random(${__V(${ra_2}) },12,ra_4)}.2008 HTTP Request - Klik vytvářecí link Datum splatnosti Získání id faktury ${__Random(${__V(${ra_3})},28,ra_5)}.${__Random(${__V(${ra_4}) },12,ra_6)}.2008 HTTP Request – Výběr dodavatele Variabilní symbol - ${__Random(10000,9999999,ra_variable)} z subjectName.txt a vložení. Částka bez DPH - ${__Random(1000,2000000,ra_sumTotal)} Celková částka s DPH získání id dodavatele – id_id ${__Random(${__V(${ra_sumTotal})},2000000,sum_sumTOtalDPH)} Měna - ${__StringFromFile(${datapath}\SODA_addInv\currency.txt)} Loop controller Proměnné deviation = 500, timer = 3000 8.1 Příloha 1: Popis stromu TEST1 8 Přílohy Přílohy Přílohy - 96 - HTTP Request – Uložení podpisu Zaúčtováno HTTP Request – Přepnutí na stránku Průvodka HTTP Request – Vytvoření podpisu Zaúčtováno HTTP Request – Klik na fakturu ve výsledku vyhledávání Získání náhodného id faktury z výsledku vyhledávání HTTP Request – Vytvoření podpisu Potvrdit schválení HTTP Request – Uložení podpisu Potvrdit schválení HTTP Request - Klik na záložku Moje Faktury HTTP Request - Klik na složku Moje faktury K ZAÚČTOVÁNÍ HTTP Request – Klik na fakturu ve výsledku vyhledávání HTTP Request – Přepnutí na stránku průvodka dle proměnných deviation, timer HTTP Request - Přihlášení uživatele Schvalovatel Interleave controller Simple controller HTTP Request - Klik na záložku Moje Faktury HTTP Request - Klik na složku Moje faktury NOVÉ Získání náhodného id faktury z výsledku vyhledávání Therad Group – 3 uživatelé Tomáš Pobuda Přílohy - 97 - HTTP Request – Uložení podpisu Zaúčtováno HTTP Request – Odhlášení uživatele Schvalovatel HTTP Request – Přepnutí na stránku Průvodka HTTP Request – Vytvoření podpisu Zaúčtováno HTTP Request – Klik na fakturu ve výsledku vyhledávání Získání náhodného id faktury z výsledku vyhledávání HTTP Request – Vytvoření podpisu Potvrdit schválení HTTP Request – Uložení podpisu Potvrdit schválení HTTP Request - Klik na záložku Moje Faktury HTTP Request - Klik na složku Moje faktury K ZAÚČTOVÁNÍ HTTP Request – Klik na fakturu ve výsledku vyhledávání HTTP Request – Přepnutí na stránku průvodka Simple controller HTTP Request - Klik na záložku Moje Faktury HTTP Request - Klik na složku Moje faktury NOVÉ Získání náhodného id faktury z výsledku vyhledávání Tomáš Pobuda Přílohy - 98 - HTTP Request – Odhlášení uživatele čtenář HTTP Request – Přepnutí na stránku Průvodka HTTP Request – seřazení dle soupce definovaného v souboru ordercol.txt Získání náhodného id faktury z výsledku vyhledávání HTTP Request – Výběr faktury z výsledku vyhledávání HTTP Request – Zadání parametrů Dodavatel a Datum vystavení HTTP Request – Návrat na parametry dotazu HTTP Request – Zadání parametru Dodavatel pomocí souboru subjectName_3.txt HTTP Request – Návrat na parametry dotazu HTTP Request – Klik na záložku faktury HTTP Request – Klik na dotaz Faktury přijaté HTTP Request – Zadání parametru Čárový kód - ${__Random(10000000,19999999,ra_ean)} HTTP Request – Přihlášení uživatele čtenář Loop controller dle proměnných deviation, timer Thread group – 10 uživatelů Tomáš Pobuda 8.2 Příloha 2: Popis stromu TEST2 Přílohy - 99 - HTTP Request – Odhlášení uživatele účetní HTTP Request – Uložení faktury (viz Uložení faktury v příloze 1) Získání vygenerovaného id dodavatele id_id HTTP Request – Založení draftu faktury Získání vygenerovaného id faktury HTTP Request – Výběr dodavatele ze souboru subjectName.txt HTTP Request – Přihlášení uživatele účetní Loop controller – 100 opakování Simple Controller Thread Group – 10 uživatelů dle proměnných deviation, timer proměnné deviation 500 a timer 2000 Tomáš Pobuda - 100 - Jméno subjektu - ${__StringFromFile(${datapath}subjectName.txt)} Typ subjektu - ${__Random(1,6,ra_type)} IČ - ${__Random(10000000,99999999,ra_ic)} DIČ - CZ${ra_ic} dle proměnných deviation, timer dle proměnných deviation, timer HTTP Request – Odhlášení uživatele Administrátor Získání vygenerovaného id subjektu HTTP Request – Založení draftu subjektu dle proměnných deviation a timer Loop Controller – 100 opakování dle proměnných deviation, timer Thread Group – 10 uživatelů HTTP Request – Přihlášení uživatele Administrátor proměnné deviation = 500 a timer = 2000 8.3 Příloha 3: Popis stromu TEST3 Přílohy Tomáš Pobuda - 101 - Získání vygenerovaného id souboru id_scan HTTP Request – Uložení objektu souboru (poslání souboru na server) HTTP Request – Výběr dodavatele ze souboru subjectName.txt Získání vygenerovaného id Dodavatele HTTP Request – Uložení faktury (viz Uložení faktury v příloze 1), kromě vlastnosti scan, kam se vyplní získané ${id_scan} HTTP Request – Odhlášení uživatele Účetní HTTP Request – Klik na Vytvořit (viz Obr. 32) HTTP Request – Založení draftu faktury Získání vygenerovaného id faktury Loop controller – 300 opakování dle proměnných deviation, timer Simple Controller HTTP Request – Přihlášení uživatele Účetní Thread Group – 10 uživatelů proměnné deviation 500 a timer 2000 8.4 Příloha 4 : Popis stromu TEST4 Přílohy Tomáš Pobuda Tomáš Pobuda ordercol.txt supplierTitle evNum sumTotal variable accountant state currency.txt CZK EUR USD CHF GBP SKK - 102 - MANUTAN Alois Dallmayr Automaten - Service VK čerpadla WANZL Kovos Nový Knín Ing. Josef Šimák MORAM CZ SSI SCHÄFER SHOP L’Oréal Professionnel LUCAFFE CZ – eshop ... subjectName.txt MAN Alo VK WAN Kov Ing MOR SSI L’O LUC ... subjectName_3.txt Soubory obsahují textové řetězce, každý na novém řádku, protože každý řetězec, který má být přečten funkcí JMeter StringFromFile musí být na novém řádku. V testech jsou použity tyto soubory: currency.txt – obsahuje kódy jmen akceptované systémem SAFE XY ordercol.txt – obsahuje jména sloupců (systémová), dle kterých lze řadit ve výsledku vyhledávání dotazu Faktury přijaté. subjectName.txt – obsahuje 100 jmen firem subjectName_3.txt – obsahuje první tři písmena z názvu firmy 8.5 Příloha 5: Obsah textových souborů Přílohy Label # Samples Average Median 90% Line 339 2475 2453 3530 Dotaz Faktury přijaté 943 1209 1000 2109 editace podpisu Potvrdit schválení 72 8030 8125 15297 Editace podpisu Proplaceno 73 1177 969 1687 editace podpisu Předat správu faktury 235 299 265 453 Editace podpisu Zaúčtováno 293 1384 1188 2203 Návrat na parametry 190 8352 8000 19969 Odhlášení 18 438 250 547 odhlášení účetní 950 1656 1578 2579 Podpis Potvrdit schválení 72 936 828 1407 Podpis Proplaceno 336 1036 922 1687 podpis Předat správu faktury 73 8022 7406 15828 Podpis Zaúčtováno 148 1289 969 2110 Přihlášení 100 1739 1172 2860 Přihlášení ctenar 20 1553 922 3984 Přihlášení účetní 147 8408 7250 20497 Seřazení "náhodně" 72 1536 1391 2141 Složka Moje faktury K PROPLACENÍ 191 960 875 1437 Složka Moje faktury K ZAÚČTOVÁNÍ 953 686 609 1031 Složka Moje faktury NOVÉ 40 2238 1641 4125 Stránka průvodka 191 1165 984 2000 Stránka Průvodka 951 1594 1515 2516 Uložit fakturu 40 349 250 563 Výběr dodavatele 1902 724 641 1078 Výběr faktury 944 1489 1453 2359 Vybrání faktury 74 1539 1390 2031 Vybrat fakturu 953 1008 891 1515 Zadání parametrů ean 148 1278 1125 1922 Zadání parametrů supplierTitle 148 1054 891 1703 Zadání parametrů supplierTitle + issueDate 40 1550 1156 2500 Založit fakturu přijatou 993 716 297 1984 Záložka Faktury 487 1035 406 2609 Záložka Moje Faktury 12136 1416 906 2375 TOTAL Automatická správa paměti Min 782 203 828 469 171 515 750 187 437 531 422 828 453 484 469 875 875 453 265 765 422 437 140 281 437 813 390 500 484 656 157 171 140 - 103 - Max Error % Throughput (sek.) KB/sec 11469 0,0 0,10 5,3 4812 0,0 0,27 6,4 21610 0,0 0,02 0,5 5422 0,0 0,02 0,5 906 0,0 0,07 0,5 6094 0,0 0,08 1,9 22875 0,0 0,05 1,1 3250 0,0 0,01 0,0 6515 0,0 0,27 11,4 2047 0,0 0,02 0,5 4235 0,0 0,10 1,9 21812 0,0 0,02 0,5 7047 0,0 0,04 0,4 12875 0,0 0,03 0,3 8437 0,0 0,01 0,1 21922 0,0 0,04 0,8 4063 0,0 0,02 1,2 4421 0,0 0,05 1,1 3750 0,0 0,27 4,7 10266 0,0 0,01 0,3 4109 0,0 0,05 1,4 7344 0,0 0,27 11,2 1906 0,0 0,01 0,0 4703 0,0 0,54 9,7 4532 0,0 0,27 11,7 5843 0,0 0,02 1,2 5890 0,0 0,27 5,3 7656 0,0 0,04 0,8 6656 0,0 0,04 0,8 8953 0,0 0,01 0,4 12843 0,0 0,28 4,0 12188 0,0 0,14 2,0 22875 0,0 3,39 86,3 8.6 Příloha 6: Výstup z Aggregate Report a srovnání – nastavení paměti Přílohy Tomáš Pobuda 1312 828 2063 141 23532 20002 TOTAL - 104 - 0,0 3,47 88,7 Max Error % Throughput (sek.) KB/sec 6421 0,0 0,27 4,8 21953 0,0 0,04 0,8 23532 0,1 0,02 0,5 23422 0,0 0,06 1,2 22031 0,0 0,02 0,5 5328 0,0 0,55 9,9 1172 0,0 0,07 0,5 625 0,0 0,01 0,0 4218 0,0 0,04 0,8 3422 0,0 0,02 0,5 1828 0,0 0,06 1,1 2047 0,0 0,02 0,5 9078 0,0 0,04 0,4 19656 0,0 0,03 0,3 6515 0,0 0,01 0,1 9437 0,0 0,27 12,0 8625 0,0 0,02 1,2 2782 0,0 0,02 1,2 8094 0,0 0,10 5,4 11296 0,0 0,04 0,8 6641 0,0 0,10 2,0 14156 0,0 0,01 0,3 2015 0,0 0,01 0,0 10485 0,0 0,08 1,9 6953 0,0 0,28 6,5 3766 0,0 0,06 1,4 7891 0,0 0,27 5,4 7532 0,0 0,27 11,5 8140 0,0 0,27 11,7 11578 0,0 0,01 0,4 16344 0,0 0,28 4,1 15328 0,0 0,14 2,0 Min 297 797 890 750 844 297 156 172 500 515 484 515 453 469 546 438 687 766 828 500 438 781 141 422 172 468 406 406 422 609 172 203 Label # Samples Average Median 90% Line Dotaz Faktury přijaté 1571 621 562 907 editace podpisu Potvrdit schválení 241 8203 7437 18219 Editace podpisu Proplaceno 119 8127 7532 20439 editace podpisu Předat správu faktury 313 7836 7281 18313 Editace podpisu Zaúčtováno 121 8581 7938 17313 Návrat na parametry 3141 651 609 906 Odhlášení 390 298 250 468 odhlášení účetní 30 296 266 516 Podpis Potvrdit schválení 241 892 781 1265 Podpis Proplaceno 119 947 860 1438 podpis Předat správu faktury 313 895 844 1313 Podpis Zaúčtováno 121 966 921 1359 Přihlášení 243 1204 1000 1875 Přihlášení ctenar 160 1693 1187 2203 Přihlášení účetní 32 1233 922 1890 Seřazení "náhodně" 1564 1428 1391 2203 Složka Moje faktury K PROPLACENÍ 120 1549 1328 2218 Složka Moje faktury K ZAÚČTOVÁNÍ 121 1448 1359 2031 Složka Moje faktury NOVÉ 557 2460 2437 3797 Stránka průvodka 242 1130 953 1516 Stránka Průvodka 554 977 875 1468 Uložit fakturu 64 2060 1625 2672 Výběr dodavatele 64 360 281 562 Výběr faktury 484 1171 1016 1781 Vybrání faktury 1561 995 890 1531 Vybrat fakturu 313 1100 1031 1656 Zadání parametrů ean 1571 929 813 1328 Zadání parametrů supplierTitle 1570 1458 1453 2188 Zadání parametrů supplierTitle + issueDate 1565 1489 1453 2235 Založit fakturu přijatou 64 1396 1078 1782 Záložka Faktury 1635 646 282 1641 Záložka Moje Faktury 798 892 407 2047 Manuální nastavení paměti Přílohy Tomáš Pobuda TOTAL Label Dotaz Faktury přijaté editace podpisu Potvrdit schválení Editace podpisu Proplaceno editace podpisu Předat správu faktury Editace podpisu Zaúčtováno Návrat na parametry Odhlášení odhlášení účetní Podpis Potvrdit schválení Podpis Proplaceno podpis Předat správu faktury Podpis Zaúčtováno Přihlášení Přihlášení ctenar Přihlášení účetní Seřazení "náhodně" Složka Moje faktury K PROPLACENÍ Složka Moje faktury K ZAÚČTOVÁNÍ Složka Moje faktury NOVÉ Stránka průvodka Stránka Průvodka Uložit fakturu Výběr dodavatele Výběr faktury Vybrání faktury Vybrat fakturu Zadání parametrů ean Zadání parametrů supplierTitle Zadání parametrů supplierTitle + issueDate Založit fakturu přijatou Záložka Faktury Záložka Moje Faktury Srovnání dle Median, Min, Max Přílohy 90% Line – Aut. 2375 3530 2109 15297 1687 453 2203 19969 547 2579 1407 1687 15828 2110 2860 3984 20497 2141 1437 1031 4125 2000 2516 563 1078 2359 2031 1515 1922 1703 2500 1984 2609 90% Line – Man. 2063 907 18219 20439 18313 17313 906 468 516 1265 1438 1313 1359 1875 2203 1890 2203 2218 2031 3797 1516 1468 2672 562 1781 1531 1656 1328 2188 2235 1782 1641 2047 - 105 - 906 828 140 141 22875 23532 Median – Aut. Median – Man. Min – Aut. Min – Man. Max – Aut. Max – Man. 2453 562 782 297 11469 6421 1000 7437 203 797 4812 21953 8125 7532 828 890 21610 23532 969 7281 469 750 5422 23422 265 7938 171 844 906 22031 1188 609 515 297 6094 5328 8000 250 750 156 22875 1172 250 266 187 172 3250 625 1578 781 437 500 6515 4218 828 860 531 515 2047 3422 922 844 422 484 4235 1828 7406 921 828 515 21812 2047 969 1000 453 453 7047 9078 1172 1187 484 469 12875 19656 922 922 469 546 8437 6515 7250 1391 875 438 21922 9437 1391 1328 875 687 4063 8625 875 1359 453 766 4421 2782 609 2437 265 828 3750 8094 1641 953 765 500 10266 11296 984 875 422 438 4109 6641 1515 1625 437 781 7344 14156 250 281 140 141 1906 2015 641 1016 281 422 4703 10485 1453 890 437 172 4532 6953 1390 1031 813 468 5843 3766 891 813 390 406 5890 7891 1125 1453 500 406 7656 7532 891 1453 484 422 6656 8140 1156 1078 656 609 8953 11578 297 282 157 172 12843 16344 406 407 171 203 12188 15328 Tomáš Pobuda 328 922 31 415 TOTAL 520 Min 360 203 46 281 62 218 31 1781 Label # Samples Average Median 90% Line Přihlášení 10 551 485 1234 Založit fakturu přijatou 100 424 390 718 Vytvoření souboru 100 89 79 140 Uložení souboru 100 418 390 594 Výběr dodavatele 100 172 140 328 Uložit 100 992 937 1453 Odhlášení 10 56 47 125 500 KB – databáze 297 31 679 TOTAL 520 Min 641 218 46 125 78 516 31 Label # Samples Average Median 90% Line Přihlášení 10 1927 1218 4734 Založit fakturu přijatou 100 687 515 1469 Vytvoření souboru 100 103 78 188 Uložení souboru 100 303 250 547 Výběr dodavatele 100 288 187 641 Uložit 100 1949 1594 3594 Odhlášení 10 68 62 141 50 KB – databáze 0.0 2,3 34,9 1953 - 106 - 0.0 2,3 37,0 Max Error % Throughput (sek.) KB/sec 1234 0.0 0,2 3,2 922 0.0 0,5 20,7 250 0.0 0,5 0,0 891 0.0 0,5 0,1 610 0.0 0,5 0,3 1953 0.0 0,5 18,5 125 0.0 0,2 1,4 5625 Max Error % Throughput (sek.) KB/sec 4734 0.0 0,2 2,9 3203 0.0 0,5 19,7 500 0.0 0,5 0,0 1781 0.0 0,5 0,1 1766 0.0 0,5 0,3 5625 0.0 0,5 17,4 141 0.0 0,3 1,7 8.7 Příloha 7: Výstupy Aggregate report z kapitoly 4.4 Přílohy Tomáš Pobuda 100 100 100 100 10 520 Vytvoření souboru Uložení souboru Výběr dodavatele Uložit Odhlášení TOTAL 10 100 100 100 100 100 10 520 Přihlášení Založit fakturu přijatou Vytvoření souboru Uložení souboru Výběr dodavatele Uložit Odhlášení TOTAL Label 1210 293 2099 604 1782 357 1337 826 734 63 1438 141 1234 109 687 672 3250 2344 5141 2235 3562 1391 3438 2625 2878 42 3576 284 6796 457 3689 1576 641 47 1078 125 6777 109 594 812 9514 63 12106 500 9685 1062 10899 5043 2671 3250 31 31 5043 5452 5249 31 31 14137 63 407 13601 62 2889 14137 31 218 12841 406 Max 6219 2344 266 6219 62 672 4922 31 235 5063 390 2625 # Samples Average Median 90% Line Min 100 Založit fakturu přijatou 5 MB – databáze 10 1,9 0,2 0,4 0,4 0,4 0,4 0,4 0,2 - 107 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1,5 0,2 0,3 0,3 0,3 0,3 0,3 0,2 Error % Throughput (sek.) 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 30,6 1,3 14,3 0,2 0,1 0,0 17,1 6,5 KB/sec 45,7 1,3 22,1 0,2 0,1 0,0 25,5 9,0 # Samples Average Median 90% Line Min Max Error % Throughput (sek.) KB/sec Přihlášení Label 1 MB – databáze Přílohy Tomáš Pobuda 100 100 100 100 100 10 520 Založit fakturu přijatou Vytvoření souboru Uložení souboru Výběr dodavatele Uložit Odhlášení TOTAL 6354 129 5971 977 17531 284 7823 4421 641 62 1609 110 16969 93 484 1891 20297 469 18891 1281 27516 672 23860 16484 3265 15234 31 31 38360 469 360 25656 62 4828 37344 32 187 38360 344 16484 Max 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1,0 0,1 0,2 0,2 0,2 0,2 0,2 0,2 Error % Throughput (sek.) 10 100 100 100 100 100 10 520 Založit fakturu přijatou Vytvoření souboru Uložení souboru Výběr dodavatele Uložit Odhlášení TOTAL 496 45 1297 210 357 118 458 1329 235 31 1015 125 172 79 375 1079 1203 78 2438 344 671 203 750 2625 2312 2922 797 16 16 5531 78 375 5531 62 78 46 203 2218 500 2625 - 108 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2,3 0,2 0,5 0,5 0,5 0,5 0,5 0,2 # Samples Average Median 90% Line Min Max Error % Throughput (sek.) Přihlášení Label 50 KB – souborový systém 10 # Samples Average Median 90% Line Min Přihlášení Label 10 MB – databáze Přílohy 36,6 1,6 18,5 0,3 0,1 0,0 20,8 3,1 KB/sec 13,9 0,8 6,1 0,1 0,1 0,0 8,0 2,9 KB/sec Tomáš Pobuda 100 100 100 100 100 10 520 Založit fakturu přijatou Vytvoření souboru Uložení souboru Výběr dodavatele Uložit Odhlášení TOTAL 462 42 1175 174 396 107 496 499 235 32 1016 109 250 78 344 468 1172 78 2000 328 828 156 891 906 906 1375 2844 31 31 5125 78 218 5125 62 156 3156 32 188 3078 359 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2,4 0,3 0,5 0,5 0,5 0,5 0,5 0,2 39,8 1,7 20,2 0,3 0,1 0,0 22,0 3,1 10 100 100 100 100 100 10 520 Založit fakturu přijatou Vytvoření souboru Uložení souboru Výběr dodavatele Uložit Odhlášení TOTAL 394 51 871 139 480 76 432 434 312 47 829 109 422 78 312 375 906 78 1328 234 719 125 672 797 797 172 734 31 31 2469 78 234 2469 62 297 1532 31 187 2282 359 - 109 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2,3 0,2 0,5 0,5 0,5 0,5 0,5 0,2 34,3 1,5 15,9 0,3 0,1 0,0 20,4 3,1 # Samples Average Median 90% Line Min Max Error % Throughput (sek.) KB/sec Přihlášení Label 1 MB – souborový systém 10 # Samples Average Median 90% Line Min Max Error % Throughput (sek.) KB/sec Přihlášení Label 500 KB – souborový systém Přílohy Tomáš Pobuda 100 100 100 100 100 10 520 Založit fakturu přijatou Vytvoření souboru Uložení souboru Výběr dodavatele Uložit Odhlášení TOTAL 964 56 1468 188 2159 110 1015 695 485 62 1188 156 1891 94 531 437 2688 110 3094 375 3265 188 2688 1984 10 100 100 100 100 100 10 520 Založit fakturu přijatou Vytvoření souboru Uložení souboru Výběr dodavatele Uložit Odhlášení TOTAL 1782 60 2278 350 5107 143 1281 1015 563 47 1515 157 4453 94 531 703 5235 110 5375 782 9250 296 3719 2453 484 844 31 31 1016 5297 2453 31 31 266 62 12359 110 9797 2703 2031 12359 31 203 375 Max 4328 110 234 3812 62 1000 4328 31 203 3484 2,1 0,2 0,4 0,4 0,4 0,4 0,4 0,2 34,6 1,4 16,2 0,2 0,1 0,0 20,1 4,3 - 110 - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1,8 0,2 0,4 0,4 0,4 0,4 0,4 0,2 32,6 1,0 15,1 0,2 0,1 0,0 18,5 5,3 Error % Throughput (sek.) KB/sec 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Max Error % Throughput (sek.) KB/sec 359 1984 # Samples Average Median 90% Line Min Přihlášení Label 10 MB – souborový systém 10 # Samples Average Median 90% Line Min Přihlášení Label 5 MB – souborový systém Přílohy Tomáš Pobuda 0 50kb 1000 2000 3000 4000 5000 Založit fakturu přijatou Uložit Přihlášení Výběr dodavatele 500kb Soubory ukládány do DB Odhlášení Vytvoření souboru - 111 - 1MB 8.8 Příloha 8: Grafy mediánu odezvy pro uživatele – kapitola 4.4 Přílohy ms Uložení souboru 5MB hodnoty 6777 a 16969 jsou mimo zobrazení 10MB Tomáš Pobuda 0 50kb 1000 2000 3000 4000 5000 Přílohy ms Založit fakturu přijatou Uložit Přihlášení Výběr dodavatele 500kb Soubory ukládány na FS Odhlášení Vytvoření souboru - 112 - 1MB Uložení souboru 5MB 10MB Tomáš Pobuda
Podobné dokumenty
gloriapolo
mnohá místa jak doma, tak i v cizině. Má svého důchovního vůdce, který je zároveň jejím
zpovědníkem. Je to Důstojný otec Wilson Alexander Mora Gonzales, kněz na Faře
Svatého Kříže v Bogotě (Parroqu...
o Debianu
soubory boot.img a root.img na dvě diskety, soubory jsou na CD ../install
Hlavní nastavení: base-config
tímto se to zadává též debconf
Instalace systému:
Debian installer CD,( nastvit proxy 10.10.1...
Automatic Storage Management (ASM)
souborových systémů
usnadňuje práci s databází na úrovni dat
uložených na disku
v Oracle od verze 10g (2003)
Příklad
Vytvoří 2 prázdné tabulky.
První tabulka používá pro vlastní uspořádání svůj sloupec username,
Druhá sloupec owner.
V praxi to znamená, že veškerá data v tabulce XYZ_users, jejichž hodnota username...
UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE Efektivní datové
Systémy pro správu osobních financí mají významnou roli v každodenním osobním životě nespočtu jejich uživatelů. Jejich cílem je pomoci s plánováním a správou osobních financí, poskytnout přehled o ...
Informace - Česká neurologická společnost
etiologii vodítkem pro terapii
Alan Carson – Velká Británie
16.00–16.30 Co může psychoterapie nabídnout pacientům
s psychogenními neepileptickými záchvaty
Stephanie Howlett – Velká Británie...
Počáteční nastavení / info
Doba nepřetržitého nahrávání a záruka výrobku. Doba nepřetržitého záznamu (viz tabulky) a předpokládaná doba nahrávání (ESTD
TIME viz menu pro nahrávání) jsou zamýšleny jako nahrávací časy při prov...
Ebook Oracle DBA - Tomas Solar Consulting
Soubor tnsnames.ora .............................................................................................................. 29
Vytvoření password file ..........................................