1 / 43

Oracle wait interface

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

aaralyn
Download Presentation

Oracle wait interface

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Oracle wait interface Lubomír Andrle lubomir.andrle@unicorn.eu 7. přednáška 18.11.2013

  2. Agenda • Co je to Oracle wait interface • Co je to wait event • Top 10 wait events

  3. Opakování

  4. 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)

  5. 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

  6. Oracle wait interface

  7. 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čí

  8. 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

  9. 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

  10. OWI • Od verze Oracle 7.0.12 • Sada pohledů • V$SYSTEM_EVENT • V$SESSION_EVENT • V$SESSION_WAIT • V$EVENT_NAME • V$SESSION

  11. 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

  12. 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ě …

  13. 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

  14. 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

  15. Pojmy II • KGX = Kernel GenericmuteX • Od verze 10.2 • Fyzicky stejná struktura jako latch • Pouze odlehčená a menší

  16. Wait events

  17. 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

  18. 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

  19. Top 10 waitevents

  20. 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

  21. Procesorový čas CPU • Není čistě waitevent • Může být dobrým ukazatelem v mnoha případech • chybný execution plan

  22. DB FileSequentialRead • Single block read • Obvykle index nebodata block pomocírowid • Rozumná hodnota: <10ms

  23. DB FileSequentialRead II • Dělat toho méně ;) • LaděníSQL • Redukce LIO • Zvětšit buffer cache • Pracovat rychleji • Urychlit I/O

  24. DB FileScatteredRead • Multiblockread • Obvykle full table scannebo fast full scan indexu • Rozumná hodnota:<10ms

  25. DB FileScatteredRead II • Dělat toho méně ;) • Lepší indexy • Dobré systémové statistiky • Větší buffercache • LaděníSQL • Pracovat rychleji • UrychlitI/O

  26. Direct PathRead/Write • Obvykletříděnív temp • Přístup vždy do PGA • Může být také paralelní dotaz • Rozumná hodnota: <20ms

  27. Porovnání

  28. 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

  29. Log FileParallelWrite • Čekání na zápis LGWR do log files • Systémová I/O operace • Rozumná hodnota : <4ms

  30. 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

  31. 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

  32. 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)

  33. 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

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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

  39. 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

  40. SQL*Net message to client • Přenos na stranu aplikační logiky

  41. 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 ;)

  42. 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ů

  43. Q&A

More Related