Execution plans Lubomír Andrle 6. přednáška 11.11.2013.

Slides:



Advertisements
Podobné prezentace
SQL Další dotazy a pohledy
Advertisements

Základy jazyka SQL Jan Tichava
SQL Trace, Profiling, …a Tuning Lubomír Andrle
Co se do přednášek nevešlo … Lubomír Andrle
Zpracování SQL Lubomír Andrle 5. přednáška
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
LOV, Listbox, Poplist a Combobox v Oracle Forms LOV – seznam hodnot, které se zobrazí po stisku klávesy Enter v textovém poli. LOV – seznam hodnot, které.
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
DB1 – 9. cvičení Optimalizace dotazu Konkurenční přístup a deadlock Indexace Transakce.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Informační systémy Realizace sběru dat v rámci realizovaných úloh.
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
SQL Structured Query Language
Informatika pro ekonomy II přednáška 11
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Lubomír Andrle 8. přednáška
Temporální databáze a TSQL
TEMPORÁLNÍ DATABÁZE A TSQL2
Radek Špinka Přepínače MSSQL výběr.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Fakulta elektrotechniky a informatiky
Optimalizace SQL dotazů
Databázové systémy teorie a návrh relačních databázových systémů část II.
Vypracoval: Ondřej Dvorský Třída: VIII.A
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
SQL – základní pojmy Ing. Roman Danel, Ph.D.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
Databázové systémy II Přednáška č. X Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Číslo šablony: III/2 VY_32_INOVACE_P4_3.8 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze – základy SQL Typ: DUM - kombinovaný.
Architektury a techniky DS Tvorba efektivních příkazů II
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Optimalizace SQL dotazů Michal Kopecký
Databázové systémy I Cvičení č. 10 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Informatika II PAA DOTAZOVACÍ JAZYKY
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Administrace Oracle Paralelní zpracování.
SQL Další dotazy a pohledy Databázové systémy. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Databázové Aplikace Slidy ke cvičení DBI026, část 2 KSI MFF UK Verze
Příkazy jazyka SQL ve VFP a na SQL Serveru
Dynamická webová aplikace Autor:Ondřej Soukup Třída:I3.
Architektury a technika databázových systémů Jiří Zechmeister 7. přednáška
Databázové systémy přednáška 6 – Indexy
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Ing. Tomáš Váňa, Ing. Jiří Zechmeister
Databázové systémy I Přednáška 11 Databázové systémy 1 – KIT/IDAS1
Architektury a technika databázových systémů
Databázové systémy a SQL
Šablona 32 VY_32_INOVACE_038.ICT.34
[ START WITH podmínka ] CONNECT BY podmínka
Optimalizace SQL dotazů
Přednáška 7 SQL – JOIN.
Přednáška 9 Triggery.
Databázové systémy a SQL
Transkript prezentace:

Execution plans Lubomír Andrle 6. přednáška

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

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

ZÍSKÁNÍ EXECUTION PLAN

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

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

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): filter(„COL1"=10)

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

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 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): access("S"."PROMO_ID"="P"."PROMO_ID") 3 - filter("PROMO_SUBCATEGORY"='online discount')

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

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 |

Možnosti trasování Události – Event Ideální možnost pochopení CBO ;) ALTER SESSION SET events '10053 trace name context forever' Pozor čtení trace files není jednoduché – Event 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!

ČTENÍ EXECUTION PLAN

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 SELECT t2.* FROM t t1, t t2 WHERE t1.n = t2.n AND t1.id > 6 AND t2.id BETWEEN 6 AND 19

Package dbms_xplan – 2. sekce Výstup – druhé sekce Plan hash value: | 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 | | 44 (0)| 00:00:01 |

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ší …

Package dbms_xplan – 3. sekce Predikáty Predicate Information (identified by operation id): access("T1"."N"="T2"."N") 3 - access("T2"."ID">=6 AND "T2"."ID"<=19) 4 - filter("T1"."ID">6)

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 (ID parent < ID child )

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 |

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 <= | Id | Operation | Name | Starts | A-Rows | |* 1 | COUNT STOPKEY | | 1 | 10 | | 2 | TABLE ACCESS FULL| EMP | 1 | 10 | filter(ROWNUM<=10)

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 = | 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 | filter(NULL IS NOT NULL) 3 - access(JOB='CLERK')

METODY JOINS

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

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ódu select empno, ename, dname loc from emp, dept where emp.deptno = dept.deptno For each row in (select empno, ename, deptno from emp) loop For (select dname, loc from dept where deptno = outer.deptno) loop If match then pass the row on to next step If inner join and no match then discard the row If outer join and no match set inner column values to null and pass to next step End loop;

Metoda Hash join Velká příprava před vlastním průchodem Hash join v pseudo kódu select empno, ename, dname loc from emp, dept where emp.deptno = dept.deptno determined the smaller row set select dname, loc, deptno from dept hash the deptno column and build a hash table select empno, ename, deptno from emp hash the deptno column and build a hash table if match confirm row if no match – discard row

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

Sort-merge join - ukázka

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

Q&A