Optimalizace SQL dotazů

Slides:



Advertisements
Podobné prezentace
Aplikační a programové vybavení
Advertisements

KIV/ZIS Cvičení 6 SQL - SELECT.
MS ACCESS - DOTAZY DATABÁZOVÉ SYSTÉMY.
Základy jazyka SQL Jan Tichava
Zpracování SQL Lubomír Andrle 5. přednáška
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
 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.
Databázové systémy SQL Výběr dat.
YDASYS1 Ing. Monika Šimková.
Fakulta elektrotechniky a informatiky
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
Výpočetní technika Akademický rok 2008/2009 Letní semestr Mgr. Petr Novák Katedra informatiky a geoinformatiky FŽP UJEP
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
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í č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy I Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Temporální Databáze Jaroslav Dražan. Čím se budeme zabývat Proč je čas v DB důležitý Práce s časem pomocí klasického SQL Reprezentace časové domény Spojování.
Co takhle DOTAZY? OBSAH: Y 1) Co jsou to dotazy ve WinBase Y 2) Vytvoření jednoduchého dotazu Y 3) Použití dotazu.
Databáze Jiří Kalousek.
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.
Execution plans Lubomír Andrle 6. přednáška
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Číslo šablony: III/2 VY_32_INOVACE_P4_3.5 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze - dotazy Typ: DUM - kombinovaný Předmět:
Fakulta elektrotechniky a informatiky
Architektura databází Ing. Dagmar Vítková. Centrální architektura V této architektuře jsou data i SŘBD v centrálním počítači. Tato architektura je typická.
Databázové systémy I Cvičení č. 9 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
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.
Databázové systémy Přednáška č. 6.
SQL – základní pojmy Ing. Roman Danel, Ph.D.
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ý.
Databáze Dotazy VY_32_INOVACE_7B16. Dotazy umožňuje vybrat určité záznamy z tabulky na rozdíl od filtru vybrané záznamy umístí do samostatné dočasné nebo.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Optimalizace SQL dotazů Michal Kopecký
PHP Vytváření formuláře.
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ů.
Aplikační a programové vybavení
Databázové systémy Informatika pro ekonomy, př. 18.
Databáze velké množství dat pevně dané struktury
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.
Architektury a techniky DS Cvičení č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy SQL Výběr dat.
Progress SQL92 Optimalizátor Jan Lánský
Analýza informačního systému. Podrobně zdokumentovaný cílový stav Paramentry spojené s provozem systému – Cena – Přínosy – Náklady a úspory – …
DBXplorer Systém pro vyhledávání nad relačními databází podle klíčových slov. zpracovala Margarita Vishnyakova.
Databázové systémy 2 Zkouška – 8:00. Příklad I - Funkce Vytvořte funkci ZK_DIFF_MIN_MAX (P_ZAM_ID NUMBER) RETURN VARCHAR2. Funkce může vracet.
Administrace Oracle Paralelní zpracování.
Použití dotazu jako zdroje dat pro sestavu Win Base 602 Lenka Šmardová, 4. Y2.
Lišta nástrojů Standard otevření, uložení a další manipulace se soubory (tj. projekty) načítání dat (mapových vrstev) „žluté plus“ změna měřítka odkaz.
Lišta nástrojů Standard otevření, uložení a další manipulace se soubory (tj. projekty) načítání dat (mapových vrstev) „žluté plus“ odkaz na další lišty.
Databázové Aplikace Slidy ke cvičení DBI026, část 2 KSI MFF UK Verze
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2015.
Databáze ● úložiště dat s definovaným přístupem ● typy struktury – strom, sekvence, tabulka ● sestává z uspořádaných záznamů ● databáze – struktura – záznam.
Databáze MS ACCESS 2010.
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Databázové systémy a SQL
Optimalizace SQL dotazů
Přednáška 7 SQL – JOIN.
Přednáška 9 Triggery.
Databázové systémy a SQL
Transkript prezentace:

Optimalizace SQL dotazů Roman Dušek http://dusek.vysokeskoly.cz

Motivace SQL je velmi flexibilní jazyk. Dvěma či více různými dotazy je možno obdržet stejná data. Rychlost různých dotazů ovšem nemusí být stejná i přesto, že vracejí stejná data.

Rozvrh přednášky Proč optimalizujeme Obecná pravidla pro psaní SQL dotazů Oracle: zpracování SQL dotazů

Proč optimalizujeme? 1/2 Jedním z hlavních důvodů provádění optimalizace v databázových (DB) prostředcích je minimalizace nákladů.

Proč optimalizujeme? 2/2 Jedná se především o minimalizaci nákladů na: zdrojový čas, kapacitu paměti (prostor), programátorskou práci. (= snažíme dosáhnout maximálního výkonu se stávajícími prostředky)

Kdo se na ladění výkonu podílí Návrhář databáze (designer) Vývojář (developer) Správce databáze (DBA) Uživatel

Obecná pravidla pro psaní SQL dotazů Vyjmenovat sloupce Používat co nejméně klauzuli LIKE Používat co nejméně klauzule IN, NOT IN Používat klauzule typu LIMIT Na začátek dávat obecnější podmínky Výběr vhodného pořadí spojení Používat hinty Nastavit indexy

Vyjmenovat sloupce 1/2 V SELECT dotazech nepoužívat v seznamu sloupců hvězdičku (*) Ve většině případů nepracujeme se všemi sloupci výsledku SELECT * FROM Lide SELECT Jmeno, Prijmeni FROM Lide

Vyjmenovat sloupce 2/2 Používáte-li v SELECT dotazu všechny sloupce, používejte také výpis jednotlivých sloupců Databáze nemusí zjišťovat seznam sloupců tabulky

Používat co nejméně klauzuli LIKE Nedoporučuje se používat pro vyhledávání ve velkých textových polích (můžou obsahovat až několik GB textu) Zamyslet se, zda nejde vyhledávání provést jinou metodou

Používat co nejméně klauzuli IN, NOT IN Vhodnější je použití příkazů WHERE a WHERE NOT EXISTS ... WHERE Doprava IN ('Ford', 'Octavia', 'Seat', 'Peugeot'); ... WHERE Typ_Dopravy = 'Automobil';

Používat klauzule typu LIMIT 1/2 V případech, kdy vybíráme např. nejstaršího člověka, můžeme použít dotaz: SELECT Jmeno, Prijmeni FROM Lide ORDER BY Vek DESC Dotaz vybere všechny záznamy, které následně sestupně setřídí

Používat klauzule typu LIMIT 2/2 Lepší řešení: SELECT Jmeno, Prijmeni FROM Lide ORDER BY Vek DESC LIMIT 0,1

Na začátek dávat obecnější podmínky 1/3 V klauzuli WHERE dávat na začátek podmínky, po kterých vypadne ze seznamu nejvíce záznamů :-/

Na začátek dávat obecnější podmínky 2/3 Příklad: V tabulce Lide hledáme ženy starší 18 let SELECT Jmeno, Prijmeni FROM Lide WHERE Pohlavi = 'Z' AND Vek > 18

Na začátek dávat obecnější podmínky 3/3 DS nejprve vyhledá záznamy, vyhovující první podmínce, z nich pak vybírá záznamy vyhovující druhé podmínce Snažíme se, aby systém vyřadil na začátku co nejvíce řádků; ty se pak již při další podmínce nezkoumají…

Výběr vhodného pořadí spojení vyhnout se plnému prohledávání tabulky (pokud možno využít index) efektivně vybírat takové indexy, které načtou z tabulky co nejméně záznamů vybrat takové pořadí spojení ze všech možných pořadí, aby bylo spojeno co nejméně položek

Další rady Použití UNION ALL místo UNION Spojování tabulek s využitím indexů Vytváření indexů pro atributy podle nichž se třídí v klauzili ORDER BY Provádění analýzy na indexovaných sloupcích

Používat hintů 1/3 Hint = podnět, kterým optimalizátoru určíme, jaký má použít plán vykonávání dotazu Hinty se aplikují na blok dotazu, ve kterém se vyskytují.

Používat hintů 2/3 SELECT jmeno, prijmeni, plat FROM ucitel WHERE pohlavi='M'; Optimalizátor by v takovémto případě zřejmě zvolil full table scan, protože pohlaví může obsahovat pouze dvě hodnoty, tedy vrácených řádků by měla být velká část ze všech možných.

Používat hintů 3/3 Pokud však víme, že učitelů - mužů je hodně málo (například ukládáme pouze učitele z mateřských školek), pak si můžeme pomocí hintu vynutit rychlejší přístup - index scan. SELECT /*+ INDEX(ucitel pohlavi_index) */ jmeno, prijmeni, plat FROM ucitele WHERE pohlavi='M';

Nastavit indexy Procházení tabulky pomocí indexu trvá mnohem kratší dobu než procházení tabulky bez jeho použití. Změna indexů se zdá být nejlepším řešením pro optimalizaci, jelikož má větší sílu než změna SQL dotazu či změna dat. Samotné vytvoření indexů však nelze brát v úvahu jako univerzální řešení problému.

Oracle: Zpracování SQL dotazů Zpracování SQL příkazů se sestává z následujících komponent: Parser Optimalizátor Generátor řádkových zdrojů (row source generator) Vlastní provádění (SQL execution)

Optimalizátor 1/3 Jádro celého zpracování Analyzuje sémantiku dotazu Hledá optimální způsob jeho provádění V Oracle rozeznáváme: Rule-based optimizer (RBO) Cost-based optimizer (CBO) Liší se v přístupu, jakým hledají optimální plán vykonávání

Optimalizátor 2/3 rule-based optimizer vyhodnocuje jednotlivé přístupové cesty pomocí předem daného systému pravidel cost-based optimizer hledá plán s nejmenšími "náklady" (využívá statistiky) Oracle doporučuje používat pouze CBO

Optimalizátor 3/3 Výstupem optimalizátoru je plán vykonávání (execution plan), který určuje: přístupové cesty k jednotlivým tabulkám používaným dotazem, pořadí jejich spojování (join order).

Statistiky 1/2 Statistiky tvoří celá řada údajů o databázových objektech (tabulkách, indexech) Některé z těchto údajů jsou přístupné prostřednictvím tabulek a pohledů slovníku dat a může je tedy využívat i uživatel databáze. Aktualizují se výpočtem nebo odhadem.

Statistiky 2/2 údaje o tabulkách (počet řádků, počet bloků, počet nevyužitých bloků, průměrnou délku záznamu) údaje o sloupcích (počet unikátních hodnot, počet prázdných (NULL) hodnot, histogram popisující distribuci dat) údaje o indexech (počet listových bloků, počet úrovní, clusterovací faktor)

Možnosti ladění 1/2 OPTIMIZER_MODE – pro dosažení maximální propustnosti (s co nejmenším využitím zdrojů), nebo dosažení co nejlepší odezvy (co nejdříve vrátit první výsledky) SORT_AREA_SIZE - Určuje velikost paměti využívané při třídění a nepřímou úměrou ovlivňuje cenu spojení

Možnosti ladění 2/2 CURSOR_SHARING – Tento parametr určuje, zda se bude dotaz vyhodnocovat přesně jak byl zadán nebo se literály nahradí vázanými proměnnými HASH_AREA_SIZE - Určuje velikost paměti využívané při hašovaném spojování a nepřímou úměrou ovlivňuje cenu hašovaného spojení

Minimalizace reparsingu dotazů Toho dosáhneme používáním jednotného zápisu dotazů a používáním vazebních proměnných místo konstant

„Dobrý návrh databáze a aplikace má daleko větší vliv na výkon, než sebelepší nastavení parametrů instance.“

Odkazy na zdroje dat http://www.oracle.com http://www.pcsvet.cz/art/article.php?id=197 http://www.dbs-intro.com/dbplus/ch01.html http://www.sweb.cz/nidrle.vaclav/oracle2/optimalizace.html

Děkuji za pozornost.