optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · optimalizace serveru možná...

36
Optimalizace serveru O výkonnostních problémech se lze dovědět dvěma způsoby na základě stížnosti uživatelů, či na základě nastavených poplachů v databázi (například při vysokém zatížení CPU, nebo příliš mnoho otevřených kurzorů apod.) Zjišťovat podrobnosti ohledně problému (v případě, že není způsoben mimo db), lze pomocí automatických nástrojů co jsou u Oracle k dispozici (ADDM apod.) Nebo ručně za pomoci dynamických pohledů V$

Upload: others

Post on 31-Dec-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Optimalizace serveru

● O výkonnostních problémech se lze dovědět dvěma způsoby na základě stížnosti uživatelů, či na základě nastavených poplachů v databázi (například při vysokém zatížení CPU, nebo příliš mnoho otevřených kurzorů apod.)

● Zjišťovat podrobnosti ohledně problému (v případě, že není způsoben mimo db), lze pomocí automatických nástrojů co jsou u Oracle k dispozici (ADDM apod.) Nebo ručně za pomoci dynamických pohledů V$

Page 2: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Optimalizace serveru

● Identifikace „úzkého hrdla“ (typicky na základě pozorování zpomalení klientské aplikace)

● Využití CPU● V$SYSSTAT(všechny sessiony dohromady),

V$SESSTAT(podle jednotlivých session)● V případě, že běží Oracle Database Resource

Manager pohled● V$RSRC_CONSUMER_GROUP (dle consumer

group)● (Je dobré zároveň ověřit, že procesorový čas

nespotřebovává jiný proces.)

Page 3: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Optimalizace serveru

● Možná řešení problému:● Přesunutí některých úloh, popřípadě spouštění

některých procesů mimo špičku.● Použít SQL_TRACE TKPROF (viz pozdější

slidy) a odladit příslušný PL/SQL program

Page 4: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Optimalizace serveru

● I/O● V$SYSTEM_EVENT (zkontrolovat jak často a

jak dlouho se čeká na I/O)● V$IOSTAT_CONSUMER_GROUP (I/O

statistiky dle consumer group)● V$IOSTAT_FILE (I/O statistiky dle souboru)● V$IOSTAT_FUNCTION(statistiky dle

jednotlivých funkcí databáze jako LGWR, DBWR....)

Page 5: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Optimalizace serveru

● V$SEGSTAT● V$SEGMENT_STATISTICS (důležité pohledy

co se týče výkonu.. Dá se z nich například spočítat jak často byly data nalezeny v cache a nemuselo se fyzicky číst). Tyto pohledy jsou hlavně dobré pro zjištění kterých tabulek se týkají výkonnostní nedostatky.

● Řešení: dle typu problému. V některých případech může pomoci zvýšení počtu blok bufferů v SGA, v případě

Page 6: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Optimalizace serveru

● Síť:● V$IOSTAT_NETWORK● Obsahuje počet čtení, dobu čekání na čtení a

zápis● Počet kB dat zapsaných/přečtených.● …● Řesení: Přesunutí úloh mimo spičku, popřípadě

přepsání klientských aplikací, aby posílali více žádostí naráz místo opětovného připojování.

Page 7: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Wait events

● Pohledy● V$SESSION informace o tom na co naposledy

každá session čekala.● V$SESSION_EVENT všechny čekání od

začátku session

Page 8: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Některé typy wait events

● Buffer busy waits ● záleží na typu bufferu● (Čekání na načtení do bufferu popřípadě blok je

zamčený)●

● free buffer waits● Pomalé DBWR/případně malá cache● db file scattered/sequential read, ● Potřeba prověřit V$SQLAREA a najít dotazy co

toto způsobují popřípadě je pomalé I/O

Page 9: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Typy wait events

● library cache latch waits● Parsování sql (V$SQLAREA)●

● log buffer space● Redo logy● V$SYSSTAT● Pomalé I/O●

● log file sync● Pomalé disky s logy, případně příliš časté

použivání commit

Page 10: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Pamět

● Velký vliv na výkon má nastavení paměti.● Je silně doporučeno používat automatickou

správu paměti. Ta lze konfigurovat pomocí inicializačních parametrů MEMORY_TARGET a MEMORY_MAX_TARGET Oracle posléze automaticky rozděluje pamět mezi SGA a PGA

● Nastavením MEMORY_TARGET na 0 se automatická správa paměti vypíná

● Je potřeba aby se tyto obě oblasti vešli do paměti a nebyly částečně swapovány na disk. Pakliže je doopravdy potřeba nastavit ručně je na to dobré použít nástroj Memory Advisor

Page 11: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Pamět

● DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE, and STREAMS_POOL_SIZE (velikosti cache)

● Velikost logbufferu, velikost ostatních cache jako je keep a recycle je bez zásahu automatické správy paměti a je třeba jí konfigurovat ručně.

● Keep pool se používá, když tabulka(index) je malá a často se k ní přistupuje. Aby nezestárla a nebyla odstraněna

● Recycle pool, když se přistupuje k ní přistupuje málokdy.

Page 12: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Automatické nástroje na ladění výkonu

● Automatic Workload Repository● Automatic Database Diagnostic Monitor● SQL Tuning Advisor● SQL Access Advisor● End to End Application Tracing

Page 13: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Automatic Workload Repository

● Vytváří snapshoty z většiny statistik ve výše zmíněných dynamických pohledech jednou za určitý časový úsek

● Časový úsek i délka historie je nastavitelná

Page 14: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Automatic Database Diagnostic Monitor

● Analyzuje data získaná pomocí AWR a automaticky zjištuje problémy a ve většině případů poskytuje i rady pro případné řešení.

● ADDM upozorňuje hlavně na tyto problémy:● Na takzvaná uzká hrdla (například pokud jsou

disky zatížené na maximum a procesory vícemeně drtivou většinu času čekají na I/O).

● Na aplikace, které se zbytečně odpojují a připojují.

● Výkonnostní problémy v souvislosti se zamykáním

Page 15: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých
Page 16: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

SQL Tuning Advisor

● SQL tuning advisor zkoumá SQL dotazy, které mají velký dopad na výkon celé databáze během času na údržbu a zkouší jestli by se nějakým způsobem nedalo urychlit jejich provádění. V závislosti na nastavení ACCEPT_SQL_PROFILES tyto zlepšení buď rovnou aplikuje nebo pouze doporučí.

Page 17: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Příklad výstupu SQL Tuning Advisor

● RECOMMENDATIONS● --------------------------------------------------------------------------------● GENERAL INFORMATION SECTION● -------------------------------------------------------------------------------● Tuning Task Name : emp_dept_tuning_task● Scope : COMPREHENSIVE● Time Limit(seconds): 60● Completion Status : COMPLETED● Started at : 05/06/2004 09:29:13● Completed at : 05/06/2004 09:29:15●

● -------------------------------------------------------------------------------● SQL ID : 0wrmfv2yvswx1● SQL Text: SELECT e.*, d.* FROM emp e JOIN dept d ON e.deptno = d.deptno● WHERE NVL(empno, '0') = :empno●

● -------------------------------------------------------------------------------● FINDINGS SECTION (2 findings)● -------------------------------------------------------------------------------

Page 18: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Příklad výstupu SQL Tuning Advisor

● 1- Statistics Finding● ---------------------● Table "SCOTT"."EMP" and its indices were not analyzed.●

● Recommendation● --------------● Consider collecting optimizer statistics for this table and its indices.● execute dbms_stats.gather_table_stats(ownname => 'SCOTT', tabname =>● 'EMP', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,● method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE)●

● Rationale● ---------● The optimizer requires up-to-date statistics for the table and its indices● in order to select a good execution plan.●

● 2- Restructure SQL finding (see plan 1 in explain plans section)● ----------------------------------------------------------------● The predicate NVL("E"."EMPNO",0)=:B1 used at line ID 2 of the execution plan● contains an expression on indexed column "EMPNO". This expression prevents● the optimizer from selecting indices on table "SCOTT"."EMP".●

● Recommendation● --------------

Page 19: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Příklad výstupu SQL Tuning Advisor

● Rewrite the predicate into an equivalent form to take advantage of● indices. Alternatively, create a function-based index on the expression.●

● Rationale● ---------● The optimizer is unable to use an index if the predicate is an inequality● condition or if there is an expression or an implicit data type conversion● on the indexed column.●

● -------------------------------------------------------------------------------● EXPLAIN PLANS SECTION● -------------------------------------------------------------------------------●

Page 20: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Příklad výstupu SQL Tuning Advisor

● 1- Original● -----------● Plan hash value: 1863486531●

● ----------------------------------------------------------------------------------------● | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |● ----------------------------------------------------------------------------------------● | 0 | SELECT STATEMENT | | 1 | 107 | 4 (0)| 00:00:01 |● | 1 | NESTED LOOPS | | 1 | 107 | 4 (0)| 00:00:01 |● | 2 | TABLE ACCESS FULL | EMP | 1 | 87 | 3 (0)| 00:00:01 |● | 3 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 20 | 1 (0)| 00:00:01 |● | 4 | INDEX UNIQUE SCAN | PK_DEPT | 1 | | 0 (0)| 00:00:01 |● ----------------------------------------------------------------------------------------●

● Note● -----● - dynamic sampling used for this statement●

● -------------------------------------------------------------------------------●

● 1 row selected.

Page 21: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

SQL Access Advisor

● Doporučuje zřízení/zrušení indexů, vytvoření materializovaných pohledů apod...

● Jako vstup je potřeba definovat jaké dotazy se budou vykonávat a na základě toho a statistik se generuje výsledné doporučení.

Page 22: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

End to End Application Tracing

● Usnadňuje diagnostikování problémů ve vícevrstvém(multitier) prostředí kdy koncový klient je připojen přes prostředníka a typicky i pomocí více session.

● Můžeme sledovat požadavky:● Dle identifikátoru klienta● Dle služby● Dle modulu● Dle akce (jako INSERT UPDATE)

Page 23: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

End to End application Tracing

● Session● Instance●

● Po uložení tracovaných informací mohou být konsolidovány pomocí utility trcsess a analyzován pomocí TKPROF

● Trcsess je potřeba použít tam kde jsou sessiony vyřizovány pomocí víceroprocesů (shared server installation)

● TKPROF se použije hlavně na to aby tracefiles byly převedeny do čitelnějšího formátu.

Page 24: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

End to End Application Tracing - příklad

● $ tkprof orcl102_ora_3064.trc output.prf EXPLAIN=scott/tiger SYS=NO●

● Tkprof: Release 9.2.0.1.0 - Production on Tue Dec 24 15:32:43 2002● Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.●

● Trace file: ORCL102_ora_3064.trc●

● Sort options: default●

● ********************************************************************************● count = number of times OCI procedure was executed● cpu = cpu time in seconds executing● elapsed = elapsed time in seconds executing● disk = number of physical reads of buffers from disk● query = number of buffers gotten for consistent read● current = number of buffers gotten in current mode (usually for update)● rows = number of rows processed by the fetch or execute call● ********************************************************************************●

Page 25: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

End to End Application Tracing Příklad

● select *● from● employee where emp_id = 3737● ● call count cpu elapsed disk query current rows● ------- ------ -------- ---------- ---------- ---------- ---------- ----------● Parse 10 0.00 0.03 0 0 0 0● Execute 10 0.00 0.00 0 0 0 0● Fetch 20 0.34 0.35 72 4730 0 10● ------- ------ -------- ---------- ---------- ---------- ---------- ----------● total 40 0.34 0.39 72 4730 0 10● ● Misses in library cache during parse: 1● Optimizer goal: CHOOSE● Parsing user id: 59● ● Rows Row Source Operation● ------- ---------------------------------------------------● 1 TABLE ACCESS FULL EMPLOYEE●

Page 26: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Získávání výkonnostních statistik

● K efektivnímu zjištování výkonnostních problémů je třeba statistik. Oracle jich generuje spoustu typů ať už pro celý system, sessiony či SQL dotazy. Rovněž lze získat statistiky týkající se služeb a segmentů.

● Kumulativní hodnoty jsou typicky dostupné přes dynamické pohledy V$SESSTAT a V$SYSSTAT (nutno podotknout že tyto statistiky jsou resetovány s vypnutím systému).

● Názvy všech statistik jsou dostupné přes pohled V$STATNAME

Page 27: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Získávání výkonnostních statistik

● Dalšími typy stastik jsou metrické (měřící jak rychle se mění kumulativní statistiky), které jsou rovněž dostupné přes již zmíněné pohledy.

● Další jsou vzorkové odebrané pomocí ASH (Active session history) dostupné přes pohled V$ACTIVE_SESSION_HISTORY

Page 28: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Stabilní plánování

● Očekáváme data s podobným rozložením a nechceme, aby se díky změně provádění dotazu neočekávaně nezměnili požadavky na zdroje.

● Užitečné ve chvilích, zejména ve chvilích, kdy za každou cenu omezit riziko.

Page 29: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Stabilní plánování

● Plány pro pro provádění dotazů, jsou uchovávány v tzv. outlines. Outline je implementována jako sada hintů k SQL dotazu pro optimizátor.

● Změníme-li jakýmkoliv způsobem SQL dotaz i přidání hintu pro optimizátor nebo změna textové konstanty (potřeba používat proměnné), výsledkem je nový outline.

Page 30: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Stabilní plánování

● Pro to aby outlines fungovali je potřeba mít konzistetně nastavené následující parametry:

● QUERY_REWRITE_ENABLED● STAR_TRANSFORMATION_ENABLED● OPTIMIZER_FEATURES_ENABLE●

● Outlines lze pro dotazy vytvářet automaticky pro všechny či použitím příkazu CREATE OUTLINE pro specifický dotaz

Page 31: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Stabilní plánování

● Automatické vytváření outlines plošné● ALTER SYSTEM SET

create_stored_outlines=TRUE;● ALTER SESSION SET

create_stored_outlines=TRUE;● Pro session

Page 32: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Stabilní plánování

● Manuální vytváření outlines● Napřed potřeba přidělit potřebná práva● CONN sys/password AS SYSDBA● GRANT CREATE ANY OUTLINE TO nekdo;● GRANT EXECUTE_CATALOG_ROLE TO

nekdo;

Page 33: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Stabilní plánování příklad

● CONN nekdo●

● -- Vytvoření outline pro daný dotaz● CREATE OUTLINE emp_dept FOR CATEGORY kategorie● ON SELECT e.empno, e.ename, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno;●

● -- Kouknout na vytvořenou outline● COLUMN name FORMAT A30● SELECT name, category, sql_text FROM user_outlines WHERE category = 'kategorie';●

● NAME CATEGORY● ------------------------------ ------------------------------● SQL_TEXT

--------------------------------------------------------------------------------● EMP_DEPT kategorie● SELECT e.empno, e.ename, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno●

● 1 row selected.●

Page 34: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Stabilní plánování příklad

● -- Vypsat hinty přiřazené k outline● COLUMN hint FORMAT A50● SELECT node, stage, join_pos, hint FROM user_outline_hints WHERE name = 'EMP_DEPT';●

● NODE STAGE JOIN_POS HINT● ---------- ---------- ---------- --------------------------------------------------● 1 1 0 NO_EXPAND(@"SEL$1" )● 1 1 0 PQ_DISTRIBUTE(@"SEL$1" "E"@"SEL$1" NONE NONE)● 1 1 0 USE_MERGE(@"SEL$1" "E"@"SEL$1")● 1 1 0 LEADING(@"SEL$1" "D"@"SEL$1" "E"@"SEL$1")

● 1 1 0 NO_STAR_TRANSFORMATION(@"SEL$1" )● 1 1 0 NO_FACT(@"SEL$1" "E"@"SEL$1")● 1 1 0 NO_FACT(@"SEL$1" "D"@"SEL$1")● 1 1 2 FULL(@"SEL$1" "E"@"SEL$1")● 1 1 1 INDEX(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO"))● 1 1 0 NO_REWRITE(@"SEL$1" )● 1 1 0 NO_REWRITE(@"SEL$1" )●

● 11 rows selected.

Page 35: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Stabilní plánování příklad

● ALTER SESSION SET query_rewrite_enabled=TRUE;

● ALTER SESSION SET use_stored_outlines=kategorie;

● Tímto se nastaví používání outlines v dané kategorii

Page 36: Optimalizace serverukopecky/vyuka/oracle2/1112/opt_ora1.pdf · Optimalizace serveru Možná řešení problému: Přesunutí některých úloh, popřípadě spouštění některých

Zdroje

● http://docs.oracle.com/cd/B28359_01/server.111/b28274/toc.htm● http://docs.oracle.com/cd/B28359_01/server.111/b28274/sqltrace.htm#PFGRF01020● http://docs.oracle.com/cd/B14117_01/server.101/b10752/outlines.htm● http://www.oracle-base.com/articles/misc/Outlines.php● http://psoug.org/reference/outlines.html● http://www.databasejournal.com/features/oracle

/article.php/3492521/Automatic-SQL-Tuning-using-SQL-Tuning-Advisor.htm