Download pptx - Execution plans

Transcript
Page 2: Execution plans

Agenda

• Shrnutí předchozích poznatků …• Jak získat execution plan• Jak umět číst execution plan• Metody joinů

Page 3: Execution plans

Opakování ;)

• Shrnutí z minulých přednášek– Execution plány vznikají v rámci hard parsu– Vznikají na základě statistik

• Vyčíslením nejvýhodnějšího costu

– Jsou uloženy v library cache (shared pool)– pozor: jedno sql může mít několik execution plans

• child cursory

– Jeden execution plan může být sdílen různými sql

Page 4: Execution plans

ZÍSKÁNÍ EXECUTION PLAN

Page 5: Execution plans

Získání execution plan

• Oracle poskytuje 4 metody pro získání execution plan– SQL příkazem EXPLAIN PLAN– Dynamický dotaz do performance view

• Pouze z library cache

– Automatic Workload Repository (AWR)– Pomocí aktivace tracing podpory

Page 6: Execution plans

Příkaz EXPLAIN PLAN

• Statement – SELECT, INSERT, UPDATE, MERGE, DELETE, CREATE TABLE, CREATE INDEX,

ALTER INDEX

• ID– Nepovinné, identifikuje příkaz v plan table

• Table– Plan table

Page 7: Execution plans

Příkaz EXPLAIN PLAN - výstup• EXPLAIN PLAN FOR SELECT * FROM T1 WHERE col1 = 10 ORDER BY col2;• SELECT * FROM table(dbms_xplan.display);

---------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 5 | 185 | 4 (25) | 00:00:01 || 1 | SORT ORDER BY | | 5 | 185 | 4 (25) | 00:00:01 ||* 2 | TABLE ACCESS FULL | T1 | 5 | 185 | 3 (0) | 00:00:01 |---------------------------------------------------------------------------

Predicate Information (identified by operation id):---------------------------------------------------2 - filter(„COL1"=10)

Page 8: Execution plans

Dotaz do performance view

• Dotaz do library cache• Důležité view– v$sql_plan

• Podobné informace jako v plan table

– v$sql_plan_statistics• Informace o spuštění příkazu (Doba běhu, počet řádků, …)

– v$sql_workarea• Paměťové nároky dotazu

– v$sql_plan_statistics_all• Sloučení předešlých view

Page 9: Execution plans

Performance view a display cursor

• Pro jednodušší interpretaci plánů– Použití package dbms_xplan– SELECT * FROM table(dbms_xplan.display_cursor('1hqjydsjbvmwq',0));

PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------SQL_ID 1hqjydsjbvmwq, child number 0-------------------------------------SELECT SUM(AMOUNT_SOLD) FROM SALES S, PROMOTIONS P WHERE S.PROMO_ID =P.PROMO_ID AND PROMO_SUBCATEGORY = 'online discount'------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | | | 517 (100)| || 1 | SORT AGGREGATE | | 1 | 30 | | ||* 2 | HASH JOIN | | 913K| 26M| 517 (4)| 00:00:07 ||* 3 | TABLE ACCESS FULL | PROMOTIONS | 23 | 483 | 17 (0)| 00:00:01 || 4 | PARTITION RANGE ALL| | 918K| 8075K| 494 (3)| 00:00:06 || 5 | TABLE ACCESS FULL | SALES | 918K| 8075K| 494 (3)| 00:00:06 |------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------2 - access("S"."PROMO_ID"="P"."PROMO_ID")3 - filter("PROMO_SUBCATEGORY"='online discount')

Page 10: Execution plans

AWR

• Úložiště zodpovědné za sběr informací souvisejících s výkonem

• Slouží pro účely „self-tuningu“• Při vytváření snímku (snapshot) může AWR

sbírat plány

Page 11: Execution plans

AWR - ukázka

SELECT * FROM table(dbms_xplan.display_awr('1hqjydsjbvmwq'));PLAN_TABLE_OUTPUT------------------------------------------------------------------------------SELECT SUM(AMOUNT_SOLD) FROM SALES S, PROMOTIONS P WHERE S.PROMO_ID =P.PROMO_ID AND PROMO_SUBCATEGORY = 'online discount'------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | | | 517 (100)| || 1 | SORT AGGREGATE | | 1 | 30 | | || 2 | HASH JOIN | | 913K| 26M| 517 (4)| 00:00:07 || 3 | TABLE ACCESS FULL | PROMOTIONS | 23 | 483 | 17 (0)| 00:00:01 || 4 | PARTITION RANGE ALL| | 918K| 8075K| 494 (3)| 00:00:06 || 5 | TABLE ACCESS FULL | SALES | 918K| 8075K| 494 (3)| 00:00:06 |------------------------------------------------------------------------------------

Page 12: Execution plans

Možnosti trasování

• Události – Event 10053

• Ideální možnost pochopení CBO ;)• ALTER SESSION SET events '10053 trace name context forever'

• Pozor čtení trace files není jednoduché

– Event 10132• Vhodné pro historii všech execution plan vztažených k

nějakému modulu• Aktivovat pouze v opodstatněných případech

• Události nejsou oficiálně podporovány!

Page 13: Execution plans

ČTENÍ EXECUTION PLAN

Page 14: Execution plans

Package dbms_xplan – 1. sekce

• Výstup - první sekce

– sql_id • Pouze v případě generování pomocí funkcí display_cursor a display_awr

– child number• Spolu se sql_id identifikuje child cursor• Součástí pouze při použití display_cursor

– SQL příkaz

SQL_ID cmm8zrzv2v2s5, child number 0-------------------------------------SELECT t2.* FROM t t1, t t2 WHERE t1.n = t2.n AND t1.id > 6 AND t2.idBETWEEN 6 AND 19

Page 15: Execution plans

Package dbms_xplan – 2. sekce

• Výstup – druhé sekcePlan hash value: 1338433605------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | | | 49 (100)| ||* 1 | HASH JOIN | | 14 | 7756 | 49 (3)| 00:00:01 || 2 | TABLE ACCESS BY INDEX ROWID| T | 14 | 7392 | 4 (0)| 00:00:01 ||* 3 | INDEX RANGE SCAN | T_PK | 14 | | 2 (0)| 00:00:01 ||* 4 | TABLE ACCESS FULL | T | 994 | 25844 | 44 (0)| 00:00:01 |------------------------------------------------------------------------------------

Page 16: Execution plans

Package dbms_xplan – 2. sekce

• Sloupce (vždy zobrazeny)– Id operace– Operation– Name objektu

• Sloupce (Oracle odhaduje)– Rows – odhad počtu vrácených řádků operace– Bytes - odhad velikosti dat operace– Cost (%CPU) – odhad ceny operace– Time – odhad délky trvání operace

• A další …

Page 17: Execution plans

Package dbms_xplan – 3. sekce

• PredikátyPredicate Information (identified by operation id):---------------------------------------------------1 - access("T1"."N"="T2"."N")3 - access("T2"."ID">=6 AND "T2"."ID"<=19)4 - filter("T1"."ID">6)

Page 18: Execution plans

Vztahy Parent - Child

• Execution plan je stromová struktura– Zachycuje pořadí spuštění operací– Plus vztahy mezi operacemi

• Pravidla vztahů mezi operacemi– Rodič má jednoho nebo více potomků– Potomek má právě jednoho rodiče– Operace bez rodiče je vždy kořen stromu– Rodič je vždy před svými dětmi (IDparent < IDchild)

Page 19: Execution plans

Ukázka vztahů

• Vztahy operací v execution plan

---------------------------------------| Id | Operation |---------------------------------------| 1 | UPDATE || 2 | NESTED LOOPS ||* 3 | TABLE ACCESS FULL ||* 4 | INDEX UNIQUE SCAN || 5 | SORT AGGREGATE || 6 | TABLE ACCESS BY INDEX ROWID||* 7 | INDEX RANGE SCAN || 8 | TABLE ACCESS BY INDEX ROWID ||* 9 | INDEX UNIQUE SCAN |---------------------------------------

Page 20: Execution plans

Optimalizační operace I

• COUNT STOPKEY– Má za úkol jakmile je to možné ukončit vykonávání– Operace má určený limit

• Pozor např. v případě Order by klauzule

SELECT * FROM emp WHERE rownum <= 10-----------------------------------------------------| Id | Operation | Name | Starts | A-Rows |-----------------------------------------------------|* 1 | COUNT STOPKEY | | 1 | 10 || 2 | TABLE ACCESS FULL| EMP | 1 | 10 |-----------------------------------------------------1 - filter(ROWNUM<=10)

Page 21: Execution plans

Optimalizační operace II

• FILTER– Nemusí být vždy aplikována pouze na filtrování dat

svých potomků– Může zabránit úplnému spuštění operace-potomka

SELECT * FROM emp WHERE job = 'CLERK' AND 1 = 2--------------------------------------------------------------------| Id | Operation | Name | Starts | A-Rows |--------------------------------------------------------------------|* 1 | FILTER | | 1 | 0 || 2 | TABLE ACCESS BY INDEX ROWID| EMP | 0 | 0 ||* 3 | INDEX RANGE SCAN | EMP_JOB_I | 0 | 0 |--------------------------------------------------------------------1 - filter(NULL IS NOT NULL)3 - access(JOB='CLERK')

Page 22: Execution plans

METODY JOINS

Page 23: Execution plans

Metody joins

• Slouží k joinům dvou datových množin– Nested Loops Joins– Hash Joins– Sort-merge joins– Cartesian joins

Page 24: Execution plans

Metoda Nested Loops

• Join dvou množin dat– Outer loop – spuštěn pouze jednou– Inner loop – spuštěn n-krát

• Nested loop v pseudo kóduselect empno, ename, dname loc from emp, dept where emp.deptno = dept.deptno

For each row in (select empno, ename, deptno from emp) loopFor (select dname, loc from dept where deptno = outer.deptno) loop

If match then pass the row on to next stepIf inner join and no match then discard the rowIf outer join and no match set inner column values to null and pass to next step

End loop;End loop;

Page 25: Execution plans

Metoda Hash join

•Velká příprava před vlastním průchodem•Hash join v pseudo kóduselect empno, ename, dname loc from emp, dept where emp.deptno = dept.deptno

determined the smaller row setselect dname, loc, deptno from depthash the deptno column and build a hash tableselect empno, ename, deptno from emphash the deptno column and build a hash table

if match confirm rowif no match – discard row

Page 26: Execution plans

Metoda sort-merge join

• Záleží na pořadí množin• Paměťově a časově náročné– Pouze pro malé množiny dat

• Setřídění a párové porovnání klíčů

Page 27: Execution plans

Sort-merge join - ukázka

Page 28: Execution plans

Cartesion join

• Kartézský join je použit při absenci podmínky• „Všechno se vším“– Pozor na počty řádku – A rows x B rows = total rows

Page 29: Execution plans

Q&A