+ All Categories
Home > Documents > Progress SQL92 Optimalizátor

Progress SQL92 Optimalizátor

Date post: 15-Mar-2016
Category:
Upload: jade-robbins
View: 27 times
Download: 0 times
Share this document with a friend
Description:
Progress SQL92 Optimalizátor. Jan Lánský [email protected]. Obsah. Úvod a přehled SQL92 server a optimalizátor Stromová reprezentace dotazu Transformace dotazu před optimalizací Optimalizace Prohlížení výsledku optimalizace Ovlivnění optimalizace. 1. Úvod a přehled. - PowerPoint PPT Presentation
36
Progress SQL92 Optimalizátor Jan Lánský [email protected]
Transcript
Page 1: Progress SQL92 Optimalizátor

Progress SQL92 Optimalizátor

Jan Lánský[email protected]

Page 2: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 2

Obsah

1) Úvod a přehled2) SQL92 server a optimalizátor3) Stromová reprezentace dotazu4) Transformace dotazu před optimalizací5) Optimalizace6) Prohlížení výsledku optimalizace7) Ovlivnění optimalizace

Page 3: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 3

1. Úvod a přehled

• Progress SQL92 server• Systém na vykonávání SQL příkazů z různých

klientů (ODBC, JDBC, embedded SQL)• Skládá se z mnoha komponent, např.:

• Komunikační manažer – komunikace s klienty• Relační ukládací manažer – I/O operace• Optimalizátor dotazů

Page 4: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 4

1. Úvod a přehled

• Optimalizátor dotazů• Najít nejrychlejší cestu, jak vykonat dotaz a

vrátit požadovaná data v co nejkratším čase.• Vyrobí specifický plán vyhodnocení• Vybere metody vyhodnocování a jejich pořadí

Page 5: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 5

1. Úvod a přehled

• Postupy optimalizátoru• Dekompozice – rozklad dotazu na základní

elementy (tabulky, sloupce, predikáty)• Operace relační algebry (projekce, restrikce,

spojení, třídění)• Kompozice – spojovaní restrikcí nebo spojení

do sekvencí navazujících kroků (pipeline)• Cenová analýza – vybírá nejlevnější operace

Page 6: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 6

2. SQL92 server a optimalizátor

Optimalizátor

Cenový m.

Statistický m.

Prováděcí m.Autorizační m.Parser Pohledový m.

Manažer SQL dotazů

Transakční relační ukládací manažer

Komunikační m.

M. Schémat

Page 7: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 7

3. Stromová reprezentace dotazu

• Dotaz se přetransformuje do relační algebry• Operace jsou uzly stromu

• Restrikce (where a join klauzule)• Projekce • Třídění (order by kluazule)• Tabulka (čtení dat z tabulky za pomoci

defaultního indexu (prohlížení tabulky) nebo speciálního indexu (prohlížení indexu)

Page 8: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 8

3. Stromová reprezentace dotazu• SELECT Jméno, DatumObjednávky• FROM zákazníci, objednávky• WHERE objednávky.DatumObjednávky = objednávky.DatumDodání

Tabulkazákazníci

projekce

restrikce

spojení

Tabulkaobjednávky

Jméno, DatumObjednávky

objednávky.DatumObjednávky = objednávky.DatumDodání

Page 9: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 9

4.Transformace dotazu

• Počáteční strom dotazu vyrobí parser• Poddotazy a predikáty ALL a ANY nahradí

spojením• Pohledy jsou nahrazeny svojí definicí

Page 10: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 10

5. Optimalizace

• Fáze optimalizačního procesu• Restrikce co nejblíže listům• Použití indexů pro restrikce• Optimalizace spojení• Optimalizace třídění• Použití indexů pro MAX a MIN funkce• Setřídění před prohledáváním

Page 11: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 11

5. Optimalizace

• Informace pro počítání ceny dotazu• Cenové metriky pro různé typy operací• Definice indexů• Vlastnosti spojovacích algoritmů• Selekce sloupců• Filtrovací faktory• Velikosti tabulek

• Je-li na výběr více variant, bere se ta nejlevnější

Page 12: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 12

5.1 Restrikce směrem k listům

• Posunutím restrikcí blíže listům se sníží množství zpracovávaných dat.

• Restrikce použité při spojení nelze posunout níže než je ono spojení.

• Je-li více restrikcí posunuto na stejnou pozici, lze je spojit do jedné.

Page 13: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 13

5.1 Restrikce směrem k listům• SELECT zaměstnanci.Jméno• FROM zaměstnanci, oddělení• WHERE zaměstnanci.ČísloOddělení = oddělení.ČísloOddělění• AND zaměstnanci.Plat>4000 AND zaměstnanci.Plat<=6000

spojení

t. zaměstnanci

projekce

restrikce

t. oddělení

zaměstnanci.Jméno

zaměstnanci.ČísloOddělení = oddělení.ČísloOddělění

zaměstnanci.Plat>4000, zaměstnanci.Plat<=6000

Page 14: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 14

5.2 Použití indexů pro restrikce

• Máme-li index na atribut v restrikci nemusíme procházet tabulku sekvenčně

• Při rovnosti na několik hodnot provedeme několik vyhledání podle indexu

• V případě intervalu najdeme jeho jednu mez a sekvenčně procházíme do nelezení druhé meze.

Page 15: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 15

5.2 Použití indexů pro restrikce• SELECT zaměstnanci.Jméno• FROM zaměstnanci• WHERE zaměstnanci.ČísloOddělení = 10 • AND zaměstnanci.Plat>6000

t. zaměstnanci

projekce

restrikce

zaměstnanci.Jméno

Index ZaměstnanciIndČísloOddělení = 10

zaměstnanci.Plat>6000

Page 16: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 16

5.2 Použití indexů pro restrikce

• Výběr nejlepšího indexu• Předpříprava výrazů v predikátech• Výběr indexů použitelných pro restrikce• Výběr nejlepšího

Page 17: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 17

5.2.1 Transformace predikátů

• sloupec = konstanta1 OR sloupec = konstanta2 sloupec IN (konstanta1, konstanta2)

• sloupec = konstanta1 OR sloupec IN (konstanta2, konstanta3) sloupec IN (konstanta1, konstanta2, konstanta3)

• sloupec LIKE “ABC%“ sloupec BETWEEN “ABC + %x0“ AND “ABC + %xff“

Page 18: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 18

5.2.2 Výběr indexů

• Pro každý predikát se najdou indexy které obsahují sloupce z predikátu.

• Pro takto najité indexy se zkontroluje zda se dá použít na operátor predikátu (=,<,, atd.)

• Pokud je index víceatributový, testuje se shoda klíče se sloupci predikátu

Page 19: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 19

5.2.3 Výběr nejlepšího index

• Pokud dala předchozí fáze alespoň jednoho kandidáty

• Výběr nejlepšího kandidáta je založen na nejnižší ceně.

• Cena vítěze se porovná se sekvenčním procházením a lepší z variant se použije.

Page 20: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 20

5.3 Optimalizace spojení

• Řešíme dva odlišné problémy• Pořadí spojení • Algoritmus pro spojení

Page 21: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 21

5.3.1 Pořadí spojení

• Zjištění velikostí sekektivit tabulek, které se budou spojovat.

• Join kardinalita = velikost * selektivita• Jako první se bude provádět spojení, které bude

mít nejmenší join kardinalitu výsledku.• Join kardinalita (A join B on podm)= join

kardinalita A * join kardinalita (B) * selektivita (podm)

Page 22: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 22

5.3.1 Pořadí spojení - příklad

Jsou spojovací podmínky mezi: T2 a T1 a T3, mezi T1 a T3 a T4, mezi T3 a T4

Řešení:1. T2 a T12. Výsledek1 s T33. Výsledek2 s T4

tabulka T1 T2 T3 T4kardinalita 3000 2000 5000 7000

Page 23: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 23

5.3.2 Výběr algoritmu spojení

• Typy algoritmů• Rozšířený algoritmus hnízděných cyklů (ANL)• Spojení sléváním• Algoritmus hnízděných cyklů

• Optimalizátor vybere algoritmus, jehož předpoklady jsou splněny a má nejmenší cenu.

Page 24: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 24

5.3.3 Algoritmus ANL

• Rozšířený algoritmus hnízděných cyklů• Prochází levý podstrom a pro každý jeho řádek

provede vyhledání podle indexu v pravém podstromu a v něm pak sekvenčně dohledává stejné hodnoty.

• Nutné podmínky• Pravý podstrom má index na atribut podle kterého se

provádí spojení• Tento index nebyl použit pro žádné jiná hledání

Page 25: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 25

5.3.4 Spojení sléváním

• Dvoufázový algoritmus• 1. fáze sort • 2. Fáze slévání

• Většinou nebývá použit, ANL mívá nižší cenu.

Page 26: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 26

5.3.5 Vnořené cykly

• Ve vnějším cyklu procházíme výsledek levého podstromu a pro každý jeho řádek projdeme celý výsledek pravého podstromu.

• Může být použit kdykoliv, ale má vysokou cenu.

• Pro malé velikosti podstromu nicméně může být nejvýhodnější.

Page 27: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 27

5.4 Optimalizace třídění

• Optimalizují se dva typy situací• Zabránění redundantnímu třídění• Náhrada sekvenčního prohledávání a

následného třídění za třídění a vyhledávání podle setříděného indexu.

Page 28: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 28

5.4.1 Redundantní třídění

• Netřídíme, pokud ke třídění dostaneme setříděný vstup.• Například máme-li na dotaz, ve kterém se na

jeden atribut používá GROUP BY a ORDER BY, stačí třídit jednou.

Page 29: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 29

5.4.2 Předsunutí třídění

• Náhrada sekvenčního prohledávání a následného třídění za třídění a vyhledávání podle setříděného indexu.

Page 30: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 30

5.5 Užití indexů pro MAX, MIN

• Existuje-li index na atribut, který je argumentem funkce, použijeme ho, místo sekvenčního procházení tabulky.

• Podíváme se na první (nebo poslední) indexovanou hodnotu.

Page 31: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 31

5.6 Setřídění před prohledáváním

• Někdy se může vyplatit místo sekvenčního vyhledávání atribut setřídit a vytvořit index.

• Výhodné pro tabulky v listech.• Nebo, hledáme-li v tabulce postupně téměř

všechny hodnoty.

Page 32: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 32

6. Prohlížení optimalizace

• Progress SQL92 Server má virtuální systémovou tabulku _Sql_Qplan

• create table “Sql_Qplan“ (• “_Pnumber“ integer not null,• “_Ptype“ integer not null,• “_Dtype“ integer not null,• “_Description“ varchar(255) not null,• “_Dseq“ integer not null• );

Page 33: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 33

6. Prohlížení optimalizace

• _Pnumber – číslo plánu, řazeno sestupně• _Ptype – číslo typu plánu• _Dtype - nepoužito• _Description – slovní popis plánu• _Dseq – číslo řádku plánu

Page 34: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 34

7. Ovlivnění optimalizace

• Plán vyhodnocení je závislý na optimalizačním algoritmu a na vstupech používaných optimalizátorem• Samotný SQL dotaz• Informace ze schémat tabulek, indexy• Statistické informace o frekvenci dat bez

indexů, statistickém rozložení dat, velikost tabulek.

Page 35: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 35

7. Ovlivnění optimalizace

• WHERE predikáty ovlivňují počty zpracovávaných řádků, čím více selektivní, tím lépe.

• Používané sloupce by měli mít index.• Pravidelně volat UPDATE STATISTICS

Page 36: Progress SQL92 Optimalizátor

19.2.2004 Progress SQL92 Optimalizátor 36

Literatura

• The Progress RDBMS SQL92 Optimizer• Progress Version 9.1D• Author: SQL Engineering Group• Edition 1, September 2002


Recommended