IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Optimalizácia výkonu v MS SQL Management Studio

V predchádzajúcom kvíze, Kvíz - Odpojená ap., SQL otázky, Manag. Štúdio v C#-ADO.NET, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.

Optimalizáciu databázy vykonávame väčšinou pridaním databázového indexu na stĺpec alebo skupinu stĺpcov, ktoré často figurujú v podmienkach otázok. Optimalizácia sa často vykonáva až po vytvorenie aplikácie a to len u otázok, ktoré trvajú dlho alebo sa spúšťa veľmi často (vygenerovania stránky trvá dlhšie, než 500ms). Nemá zmysel plytvať časom vývojárov na optimalizáciu dotazu, ktorý sa spúšťa len zriedka. Z mojich skúseností možno ušetriť čas hlavne na strane serverového jazyka (napr. PHP je veľmi pomalé) než na strane databázy, ktoré bývajú väčšinou veľmi rýchle.

U optimalizácia databázy postupujeme nasledovne:

Zvyčajne sa najprv pozrieme, či je dotaz v poriadku a či by nešiel vyriešiť lepšie. Občas sa pozeráme na problém zo zlého uhla a zbytočne by sme optimalizovali zlý dotaz, keď sa môže položiť inak.

Ďalej skontrolujeme prítomnosť databázových indexov, ak poznáte teóriu okolo vyhľadávacích algoritmov (stromov), určite viete, že to má na výkon obrovský vplyv.

Ak máme s aplikáciou stále výkonnostné problémy, môžeme pristúpiť k tzv. Denormalizáciu, kedy spojíme 2 alebo viac tabuliek do jednej, aby sme sa vyhli JOINování. Takáto operácia má potom samozrejme nepriaznivý vplyv na návrh aplikácie. Bohužiaľ často platí nepriama úmernosť medzi pekne napísanú aplikáciou (myslené po stránke zdrojového kódu) a rýchlu aplikácií.

My si tu ukážeme najčastejší spôsob optimalizácie a to pridaním indexu na stĺpec. Opäť nadviažeme na náš vzdelávací projekt a vymyslíme si s ním výkonnostný problém.

Problém

Po niekoľkých mesiacoch prevádzky sa výrazne zvýšila záťaž servera a nastala potreba túto situáciu riešiť. Najčastejším dotazom je zobrazenie obsahu článku podľa stĺpca PrettyURL. Táto hodnota sa serveru odošle ako parameter v GET a server podľa neho nájde a vráti požadovaný článok. K tomuto stĺpci nie je priradený žiadny index, čo sa podpisuje na výkone aplikácie.

Pridanie databázového indexu

Hoci sa na testovacích dátach zrejme neprejaví žiadna zmena, rád by som načrtol, ako by optimalizácia prebiehala na skutočných dátach. V nástroji SQL Server Management Studio spustíme dotaz na výber článku podľa PrettyURL a necháme si vygenerovať Execution plan pomocou tlačidla Tlačidlo pre vygenerovanie exekučného plánu - Databázy v C # - ADO.NET
:

SELECT
    c.Perex,
    c.PrettyURL,
    c.Keywords,
    c.Titulek,
    c.Obsah,
    c.Publikovano,
    u.Nick
FROM Clanek c, Uzivatel u
WHERE ((c.PrettyURL = 'co-je-to-algoritmus')
    AND (c.AutorID = u.UzivatelID));

Výsledok bude vyzerať napr. Nasledovne:

Exekučné plán v Microsoft SQL Management Studio - Databázy v C # - ADO.NET

A jednotlivé parametre:

Parametre exekučného plánu v Microsoft SQL Management Studio - Databázy v C # - ADO.NET

Následne vytvoríme index na stĺpci PrettyURL:

CREATE INDEX idx_clanek_prettyurl ON Clanek (PrettyURL);

Opätovné vyvolanie Execution plan by na ostré databázu, ktorá by určite mala niekoľko desiatok MB, určite prinieslo výrazné zmeny. Na testovacích dátach sa zmena vôbec neprejaví, však sme si to aspoň vyskúšali :)


 

Predchádzajúci článok
Kvíz - Odpojená ap., SQL otázky, Manag. Štúdio v C#-ADO.NET
Všetky články v sekcii
Databázy v C # - ADO.NET
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity