Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

Optimalizácia výkonu v MS SQL Management Studio

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 vytvorení aplikácie a to iba pri dotazoch, ktoré trvajú dlho alebo sa spúšťajú veľmi často (vygenerovanie stránky trvá dlhšie ako 500ms). Nemá zmysel plytvať časom vývojárov na optimalizáciu dotazu, ktorý sa spúšťa len zriedka. Z mojich skúseností je možné ušetriť čas hlavne na strane serverového jazyka (napr. PHP je veľmi pomalé) ako na strane databázy, ktoré bývajú väčšinou veľmi rýchle.

Pri optimalizácii databázy postupujeme nasledovne:

Obvykle sa najskôr pozrieme, či je otázka v poriadku a či by sa nedala 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, pokiaľ poznáte teóriu okolo vyhľadávacích algoritmov (stromov), určite viete, že to má na výkon obrovský vplyv.

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

My si tu ukážeme najčastejší spôsob optimalizácie 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šou otázkou 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ĺpcu 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 na vygenerovanie exekučného plánu - Databázy v C# - ADO.NET - 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. takto:

Exekučný plán v Microsoft SQL Management Studio - Databázy v C# - ADO.NET - 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 - 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 ostrej databáze, 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í, ale sme si to aspoň vyskúšali:)


 

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