Architektury a technika databázových systémů

Slides:



Advertisements
Podobné prezentace
Základy jazyka SQL Jan Tichava
Advertisements

SQL Trace, Profiling, …a Tuning Lubomír Andrle
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
Execution plans Lubomír Andrle 6. přednáška
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
Architektury a techniky DS Tvorba efektivních příkazů II
Administrace Oracle Paralelní zpracování.
Databázové Aplikace Slidy ke cvičení DBI026, část 2 KSI MFF UK Verze
Autor, Název akce Databázové systémy a SQL Lekce 7 Daniel Klimeš.
Poměrní ukazatelé Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T. G. Masaryka, Kostelec nad Orlicí.
OPERAČNÍ SYSTÉMY Část 3 – správa procesů Zpracovala: Mgr. Marcela Cvrkalová Střední škola informačních technologií a sociální péče, Brno, Purkyňova 97.
Praha, Ing. Petr Řádek Číslování vlaků - Rekapitulace Setkání dopravců a zástupců provozovatele dráhy.
Systém správy dokumentace akreditované zkušební laboratoře Bc. Jan Randl, 4912.
ZAL – 5. cvičení Martin Tomášek Pole - opakování Základní datový typ. V poli držíme více elementů (jednoho typu) S elementy v poli můžeme manipulovat.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Databáze © Mgr. Petr Loskot
Úvod do databází MS Access (1).
Databázové systémy přednáška 6 – Indexy
Databázové systémy I Přednáška 7 Databázové systémy 1 – KIT/IDAS1
Slovní úlohy řešené rovnicemi
Systémové databáze v SQL Serveru
Dotazovací jazyk SQL I.
Vytvořil: Robert Döring
Matematika 3 – Statistika Kapitola 4: Diskrétní náhodná veličina
Evaluace předmětů studenty (Anketky)
Databázové systémy a SQL
Způsoby zápisu algoritmů
Databázové systémy a SQL
Číslo projektu CZ.1.07/1.5.00/ Číslo materiálu
Přístupový systém aneb kontrola vstupů
Financováno z ESF a státního rozpočtu ČR.
Jedno-indexový model a určení podílů cenných papírů v portfoliu
Databáze MS ACCESS 2010.
Programovací jazyky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Databázové systémy přednáška 3 – CRUD
Architektury a technika databázových systémů
Vkládání dat MS Access (5).
Souběh Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Vytvoření databázového dotazu z více tabulek
Číslo projektu CZ.1.07/1.5.00/ Číslo materiálu
Název školy: Základní škola a mateřská škola Uhřice, okres Hodonín
Vliv změn ve Studijním a zkušebním řádu na registrace a zápis studentů
SÁRA ŠPAČKOVÁ MARKÉTA KOČÍBOVÁ MARCELA CHROMČÁKOVÁ LUKÁŠ BARTOŠ B3E1
Popis výukového materiálu Název: PowerPoint
BIBS Informatika pro ekonomy přednáška 2
Informatika pro ekonomy přednáška 8
Legislativní tok Ministerstvo spravodlivosti SR
Databázové systémy a SQL
Počítačová cvičení z předmětu Datové sklady
Microsoft Office Access
MU002 Informatika II Základy algoritmizace 1/13
Dotazovací jazyk SQL I.
Výukový materiál zpracovaný v rámci projektu
Materiál byl vytvořen v rámci projektu
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
A5M33IZS – Informační a znalostní systémy
Název: VY_32_INOVACE_ICT_7B_12B Škola:
Přednáška 6 SQL – spojení tabulek.
Lomené výrazy (2) Podmínky řešitelnost
Přednáška 10 Uložené procedury.
Přednáška 8 INDEXY, POHLEDY.
Přednáška 5 Úvod do SQL.
Databázové systémy a SQL
TSQL2 The Temporal Structured Query Language Jaroslav Ciml
MU002 Informatika II Základy algoritmizace 1/13
SQL Server 2017: Automatic tuning
Transkript prezentace:

Architektury a technika databázových systémů Jiří Zechmeister jiri.zechmeister@unicornsystems.eu 6. přednáška 9.11.2016

Execution plans 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 ID Table 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): --------------------------------------------------- 2 - 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 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')

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í Balíček DBMS_MONITOR SESSION_TRACE_ENABLE CLIENT_ID_TRACE_ENABLE DBMS_APPLICATION_INFO – možnost podepisování session SET_MODULE SET_ACTION SET_CLIENT_INFO A další metody ALTER SESSION SET SQL_TRACE=TRUE; ALTER SESSION SET TRACEIDENTIFIER=MOJE;

Možnosti trasování Události Event 10053 Event 10132 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!

Č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 0 ------------------------------------- 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: 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 |

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): --------------------------------------------------- 1 - 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 (IDparent < IDchild)

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

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 Nested loop v pseudo kódu 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 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