430 likes | 626 Views
Oracle wait interface. Lubom ír Andrle lubomir.andrle @ unicorn.eu 7 . přednáška 18 .1 1 .201 3. Agenda. Co je to Oracle wait interface Co je to wait event Top 10 wait events. Opakování. Opakování - Jak probíhá dotaz. Uživatel zadá dotaz Server začne zpracovávat dotaz
E N D
Oracle wait interface Lubomír Andrle lubomir.andrle@unicorn.eu 7. přednáška 18.11.2013
Agenda • Co je to Oracle wait interface • Co je to wait event • Top 10 wait events
Opakování - Jak probíhá dotaz • Uživatel zadá dotaz • Server začne zpracovávat dotaz • Shared pool provede soft-parse, jinak hard-parse • Vloží do sharedpoolu • Vložení nového příkazu do shared poolu vyžaduje latch • Server proces hledá v buffercache požadovaný data blok • Data block přesune do sekce naposledy použitých • Nebyl nalezen, server proces načte data ze souboru na disku (I/O a latch)
Opakování - Jak probíhá update • Uživatel spustí příkaz UPDATE • Hard-parse x soft-parse • Změněné řádky se změní v sharedmemory a také v undotablespace • Změna se projeví v redologssouborech • Proces DBWR zapíše změněné data z buffercache do file systému • Při commit se logwriter pokusí zkopírovat obsah redo log bufferu do redo log souborů • Každé 3 vteřiny nebo v případě, že nastane „switch“ redo logů nastane checkpoint
Základní myšlenka • Protože potřebujete vědět kde vaše aplikace tráví čas ;) • Záznam ukaždé obslužné rutiny • Před jejím spuštěním vyvolá událost • Provede se vlastní kód • Událost se ukončí
Co je Oracle wait interface (OWI) • Nástroj pro sledování časové náročnosti činností v rámci životního cyklu session • Umožňuje identifikovat úzká místa (bottleneck) • Slouží pro sledování waitevents
Proč OWI • Dokáže rychle identifikovat úzká místa Response Time = Service Time + Wait Time • Při ladění DB dává smysl používat response time • Přesně ukazuje na úzká místa
OWI • Od verze Oracle 7.0.12 • Sada pohledů • V$SYSTEM_EVENT • V$SESSION_EVENT • V$SESSION_WAIT • V$EVENT_NAME • V$SESSION
Instrumentace • Myšlenka Oracle • Každá činnost musí být zaznamenána • Každá činnost musí být dohledatelná • Každá činnost musí mít úrovně detailu • Nástroje pro trace • Event 10046 • Sqlextendedtrace • Ukázka
Použití Trace • Důležité jak na DB úrovni tak na aplikační vrstvě • „Obalit“ kód pracující s DB (podepsání session, …) • Např. package ILO (InstrumentationLibraryfor Oracle ) • http://method-r.com/software/ilo • Bez možnosti sledovat skutečný běh nelze systém provozovat, nebo jenom velice obtížně …
Ukázka tracefile PARSING IN CURSOR #1 len=923 dep=0 uid=82 oct=3 lid=82 tim=1071461386936456 hv=3471484162 ad='db203a8' selecty.oppar_db_job_name,y.oppar_db_job_rec,y.oppar_db_prefix,y.oppar_db_request_flag, y.oppar_db_run_id,TO_CHAR(y.oppar_db_last_date,'yyyymmdd') ,oppar_run_modefrom ……………………………. END OF STMT EXEC#1:c=2720000,e=2819768,p=29022,cr=31542,cu=0,mis=0,r=0,dep=0,og=4,tim=1071461386936431 FETCH #1:c=0,e=9,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=1071461386936555 WAIT #1: nam='SQL*Net message to client' ela= 5 p1=1952673792 p2=1 p3=0 WAIT #1: nam='SQL*Net messagefromclient' ela= 19535208 p1=1952673792 p2=1 p3=0 BINDS #1: bind 0: dty=1 mxl=32(03) mal=00 scl=00 pre=00 oacflg=00 oacfl2=1 size=32 offset=0 bfp=110319ed0 bln=32 avl=00 flg=05 WAIT #1: nam='dbfilesequentialread' ela= 27 p1=45 p2=119835 p3=1 WAIT #1: nam='dbfilesequentialread' ela= 10 p1=45 p2=119838 p3=1 WAIT #1: nam='dbfilescatteredread' ela= 74 p1=45 p2=119847 p3=2 WAIT #1: nam='dbfilesequentialread' ela= 9 p1=45 p2=119852 p3=1
Pojmy • Latch • Oracle low-level mechanismus pro serializaci přístupu do paměťových struktur • buffercache, … • Jednoduchá paměťová struktura • Latchcontention • Chci latch, ale někdo jiný ji právě používá • Počkám až bude k dispozici
Pojmy II • KGX = Kernel GenericmuteX • Od verze 10.2 • Fyzicky stejná struktura jako latch • Pouze odlehčená a menší
Co je to waitevent • Oracle termín … • Procesy čekají na • Uvolnění zdrojů • Dokončení jiné akce • Samotnou práci • OWI umožňuje měření právě těchto waitevents
Přehled waitevents • 41 skupinwait events v10.2.0.3 • 878 wait events in 10.2.0.3 • 209 enqueue events • 29 latch events • 41 I/O events
Motivace • Jde o čistě subjektivní výběr nejdůležitějších waitevents • Měli byste vědět • Co je způsobuje • Jaké hodnoty jsou přiměřené • Co můžete dělat, abyste je opravili
Procesorový čas CPU • Není čistě waitevent • Může být dobrým ukazatelem v mnoha případech • chybný execution plan
DB FileSequentialRead • Single block read • Obvykle index nebodata block pomocírowid • Rozumná hodnota: <10ms
DB FileSequentialRead II • Dělat toho méně ;) • LaděníSQL • Redukce LIO • Zvětšit buffer cache • Pracovat rychleji • Urychlit I/O
DB FileScatteredRead • Multiblockread • Obvykle full table scannebo fast full scan indexu • Rozumná hodnota:<10ms
DB FileScatteredRead II • Dělat toho méně ;) • Lepší indexy • Dobré systémové statistiky • Větší buffercache • LaděníSQL • Pracovat rychleji • UrychlitI/O
Direct PathRead/Write • Obvykletříděnív temp • Přístup vždy do PGA • Může být také paralelní dotaz • Rozumná hodnota: <20ms
Log FileSync • Uživatelský proces čeká na LGWR • Vyprázdnění redo po uživatelském commit • Pozor na příliš mnoho commitů • Rozumná hodnota : <4ms
Log FileParallelWrite • Čekání na zápis LGWR do log files • Systémová I/O operace • Rozumná hodnota : <4ms
Log fileswitch … • Nastane, když databáze přepíná log files • Zamrznutí celé databáze • Rozumná hodnota: 0ms • Typy • log file switch(archiving needed) • log file switch (checkpoint incomplete) • log file switch (private strand flush incomplete) • log file switch completion
Read by other session • Soupeření o stejný blok • Více session chce číst stejný blok • Více session čeká na dokončení změny bloku
Read by other session II • Komplikované předcházení • Obecně • Eliminujte soupeření • Najděte a eliminujte horké objekty • Jedna z cest odhalení úzkého místa je ASH (active session history)
Read by other session III • LGWR – proces starající se o zápis do logů • DBWR – proces starající se o zápis dat • User1,2,3 – uživatelské procesy
Read by other session IV • Při modifikaci bloku musí být zamčena hlavička bloku • Zámek je na velice krátkou dobu, ale v případě více procesů může jít o úzké místo
Enqueuelocks • Rozdíl oproti latch • Latch poskytuje exkluzivní přístup • Enqueues umožňují sdílený přístup • V případě latch musí session usnout nebo zkoušet přístup znovu a nemá záruku, že latch získá při dalším pokusu
Monitoring enqueuelocks • V$LOCK • Seznam aktuálních enqueues • Obsahuje typ enqueue • V$SESSION_WAIT • Lze jednoduše zjistit čekající sessions • V$SESSION • Od verze 10g • Wait informacezV$SESSION_WAIT • BLOCKING_INSTANCE a BLOCKING_SESSION
TX waitevents - enqueue • Transakční zámek (Transactionenqueue) • Contention na konkrétní řádek tabulky • Cílem je zabránit zápisu dvou session do stejného řádku tabulky • Uvolněn vždy při commit transakce
TM waitevents - enqueue • „DDL“ zámky (Table ModificationEnqueue) • Cílem je zabránit změnit definice tabulky dvěma session • Typicky nastává při ověřování FK
SQL*Net messagefromclient • Databáze je v klidovém stavu • Čeká na další požadavek od klienta • Často označována jako „Idleevent“ • Ukazuje na přenesení vykonávání na aplikační vrstvu
SQL*Net message to client • Přenos na stranu aplikační logiky
SQL*Net more data from client • Pro poslání SQL je potřeba více jak jeden packet • Neposílejte SQL větší než 50kB ;)
SQL*Net more data from client • Stejné jako SQL*Net message to client, ale pro data • Hodnoty bind proměnných • Bulk operace • Reprezentuje čas potřebný pro zabalení dat do packetů