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í.

Optimalizace výkonu v MS SQL Management Studio

Optimalizaci databáze provádíme většinou přidáním databázového indexu na sloupec nebo skupinu sloupců, které často figurují v podmínkách dotazů. Optimalizace se často provádí až po vytvoření aplikace a to pouze u dotazů, které trvají dlouho nebo se spouští velmi často (vygenerování stránky trvá déle, než 500ms). Nemá smysl plýtvat časem vývojářů na optimalizaci dotazu, který se spouští jen zřídka. Z mých zkušeností lze ušetřit čas hlavně na straně serverového jazyka (např. PHP je velmi pomalé) než na straně databáze, které bývají většinou velmi rychlé.

U optimalizace databáze postupujeme následovně:

Obvykle se nejprve podíváme, zda je dotaz v pořádku a zda by nešel vyřešit lépe. Občas se díváme na problém ze špatného úhlu a zbytečně bychom optimalizovali špatný dotaz, když se může položit jinak.

Dále zkontrolujeme přítomnost databázových indexů, pokud znáte teorii okolo vyhledávacích algoritmů (stromů), určitě víte, že to má na výkon obrovský vliv.

Pokud máme s aplikací stále výkonnostní problémy, můžeme přistoupit k tzv. denormalizaci, kdy spojíme 2 nebo více tabulek do jedné, abychom se vyhnuli JOINování. Takováto operace má potom samozřejmě nepříznivý vliv na návrh aplikace. Bohužel často platí nepřímá úměrnost mezi hezky napsanou aplikací (míněno po stránce zdrojového kódu) a rychlou aplikací.

My si zde ukážeme nejčastější způsob optimalizace a to přidáním indexu na sloupec. Opět navážeme na náš vzdělávací projekt a vymyslíme si s ním výkonnostní problém.

Problém

Po několika měsících provozu se výrazně zvýšila zátěž serveru a nastala potřeba tuto situaci řešit. Nejčastějším dotazem je zobrazení obsahu článku podle sloupce PrettyURL. Tato hodnota se serveru odešle jako parametr v GET a server podle něj nalezne a vrátí požadovaný článek. K tomuto sloupci není přiřazen žádný index, což se podepisuje na výkonu aplikace.

Přidání databázového indexu

Ačkoli se na testovacích datech patrně neprojeví žádná změna, rád bych nastínil, jak by optimalizace probíhala na skutečných datech. V nástroji SQL Server Management Studio spustíme dotaz na výběr článku dle PrettyURL a necháme si vygenerovat Execution plan pomocí tlačítka Tlačítko pro vygenerování exekučního plánu - Databáze 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ýsledek bude vypadat např. takto:

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

A jednotlivé parametry:

Parametry exekučního plánu v Microsoft SQL Management Studio - Databáze v C# - ADO.NET

Následně vytvoříme index na sloupci PrettyURL:

CREATE INDEX idx_clanek_prettyurl ON Clanek (PrettyURL);

Opětovné vyvolání Execution plan by na ostré databázi, která by jistě měla několik desítek MB, jistě přineslo výrazné změny. Na testovacích datech se změna vůbec neprojeví, nicméně jsme si to alespoň vyzkoušeli :)


 

Všechny články v sekci
Databáze v C# - ADO.NET
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
4 hlasů
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 se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity