Hlavní navigace

Markus Winand: SQL Performance Explained

Pavel Stěhule 8. 7. 2013

Při svých školeních vidím, že se překvapivě hodně vývojářů nedokáže jednoduše vymanit z limitů, které jsou vlastní technologii, kterou při své běžné práci denně používají. Jsou příliš zafixovaní na jednu technologii, což jim pak překáží efektivně řešit případné výkonnostní problémy moderních databází.

Všeobecně chybí základní znalosti datových struktur – co je to hash, strom, pole a jaké jsou jejich vlastnosti a vhodné nasazení. Chybí znalosti a schopnosti psaní si vlastních specializovaných serverů – což má důsledek v neefektivním využití paměti a CPU. Úplně by postačila schopnost vývoje primitivních serverů typu memcache. Chybí schopnost správně vybrat technologie vůči předpokládanému charakteru provozu a objemu zpracovaných dat.

Pro běžnou praxi není nutné mít akademické vzdělání a rozumět úplně všemu (nehledě na to, že takový tu snad nikdo ani není). Určitě je ale vhodné mít základy pro každou používanou technologii a vědět něco i o věcech, které se zrovna ve firmě nepoužívají. Relační databáze jsou jednou z nejčastěji chybně používaných technologií. Jsou relativně user friendly (ostatně za tímto účelem bylo SQL navrženo), a tak s databázemi může velice rychle dělat každý bez proškolení. To ale může svádět k mylným domněnkám a nepříjemným překvapením. To když dojde na lámání chleba a databáze se nepříjemně zvětší. Pak už ty znalosti nutné jsou. Alespoň základní, nebo ještě lépe minimální nezbytné. Ke studiu nejsou nutné drahé kurzy, stačí kvalitní literatura. A zrovna jednu knihu si dovolím doporučit, jelikož v čitelném rozsahu (zhruba 200 stran) přináší základní přehled znalostí nezbytných pro efektivní práci s databázemi.

S jejím autorem Markusem Winandem jsem se potkal na letošním P2D2 a měl jsem čas se s ním bavit o jeho práci. Zjistili jsme, že máme úplně stejné zkušenosti – velká část problémů s výkonem je relativně jednoduše řešitelná a jejich příčinnou jsou chybějící základní znalosti (částečně teorie, částečně řemesla) a mylné předpoklady (např předpoklad, že se Oracle bude chovat stejně jako MSSQL Server). Markusova kniha se mi líbí i proto, že přehledně popisuje základy rovnou pro čtyři databazové systémy: MySQL, Oracle, PostgreSQL a MSSQL Server (řazeno abecedně). A to aniž by některé databázi nadržoval (i když hodně prostoru dostává Oracle – díky některým svým hodně specifickým a zvláštním funkcím). To mi přijde hodně dobré a praktické – mezi těmito databázemi jsou velké rozdíly (i když je spojuje SQL) a je důležité to akceptovat (a vědět (tušit) v čem, kde, a kdy může být problém).

První kapitola se jmenuje Anatomie indexů. Všichni programátoři vědí, že indexy urychlují provádění dotazů. Ale už ne každý programátor ví, jak indexy fungují a co reálně dělají. Druhá a patrně nejdelší kapitola je zaměřená na klauzuli WHERE příkazu SELECT. Autor zde vysvětluje, proč některé (a programátory oblíbené) způsoby zápisu podmínky efektivně blokují použití indexů a jsou důvodem, proč je dotyčný dotaz pomalý. Hezký příklad je ze strany 66:

-- a. špatně
SELECT ...
   FROM sales
  WHERE to_char(sale_date, 'YYYY-MM-DD') = '1970-01-01'

--b. dobře
SELECT
   FROM sales
  WHERE sale_date = to_date('1970-01-01', 'YYYY-MM-DD');

Tento příklad je hodně názorný – neproškoleného vývojáře to netrkne, ale zkušenějšímu nebo proškolenému vývojáři by při pohledu na příklad (a) měla naskakovat husí kůže.

Krátká třetí kapitola je věnovaná otázkám výkonu a škálování a je spíš seznámením s všeobecně používanou terminologií. Čtvrtá kapitola se věnuje spojování relací – joinům. Jsou zde vysvětleny nejčastější implementace spojení relací – nested loop, hash join a merge join. Pátá kapitola je věnovaná speciálním formátům dat a technikám umožňujícím rychlejší přístup k datům – index only scan, index organized tables atd. V další kapitole se čtenář seznámí s implementací řazení a agregace. V sedmé kapitole se autor věnuje tzv. TOP n dotazům a stránkování výsledků (S přednáškou věnovanou nevhodnému používání klauzulí LIMIT a OFFSET vystoupil na letošním P2D2). Poslední kratší kapitola je věnovaná modifikacím dat – příkazům INSERT, UPDATE a DELETE. V příloze pak čtenář najde stručný návod, jak číst prováděcí plány v knize zmíněných databází.

Na Markusovi se mi líbí, že je přímočarý. Recenzovaná kniha neobsahuje žádnou vatu – a že je útlá, tak by mohla být i naděje, že si přečtou ti, kterým je určena – vývojáři, kteří používají SQL relační databáze, které jsou, zatím, pro ně černou skříňkou. Má to smysl, protože je relativně obtížné dostat z databází maximum, ale je poměrně snadné (stačí neházet databázi klacky pod nohy a programovat s trochou fištrónu) dostat z databáze dost na to, aby byli uživatelé spokojeni.

Informace o knize

Název: SQL Performance Explained
Autor: Markus Winand
Jazyk: angličtina
Počet stran: 204
Vydavatel: Markus Winand
Rok vydání: 2012
Vazba: brožovaná
ISBN: 978–3–9503078–2–5

Našli jste v článku chybu?

8. 7. 2013 9:19

Primárně je to moje doporučení (pod které se mohu podepsat) přečíst si tuto knihu - a věřte mi, že jsem nedostal od Markuse ani halíř, a předpokládám, že iinfo na tom trhe zrovna takovou částku.

Přijde mi hrozně hloupé, že programátoři neustále opakují jednoduché chyby, které nedokáží jednoduše opravit (jelikož netuší, v čem je problém) a tak si hrozně komplikují život. A kolikrát ho komplikují i ostatním. Není to jenom moje zdejší zkušenost - zrovna tak to je i v Rakousku a jinde, kde Markus p…

8. 7. 2013 9:49

Odpovím oklikou - většina problémů s výkonem je způsobená špatným zápisem podmínek, díky kterému si to planner nemůže překopat - a výsledkem je pomalý dotaz. Markus si postupně staví prostor, pro to, aby mohl tyto antipaterny vysvětlit - a aby čtenář prozřel - nestačí jenom vědět, co nedělat - důležité, je vědět, proč to nedělat. Tomu je věnována víc než polovina knihy.

Samotného popis optimalizace a interních mechanismů v DB tam moc není - alespoň z mého pohledu. Primární cílovou skupinou jsou…

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Jak vybrat ořechy do cukroví a kde mají levné

Jak vybrat ořechy do cukroví a kde mají levné

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Lupa.cz: Seznam mění vedení. Pavel Zima v čele končí

Seznam mění vedení. Pavel Zima v čele končí