Přehled indexu SQL Server
Když mluvíme o ladění výkonu SQL Server a vylepšení dotazů, první věcí, kterou je třeba zvážit, je index SQL Server. Slouží k urychlení čtení dat z podkladových tabulek tím, že poskytuje rychlý přístup k požadovaným řádkům. Nebude tedy muset skenovat všechny záznamy tabulky.
Index SQL Server poskytuje tyto možnosti rychlého vyhledávání díky struktuře B-Strom indexu. Tato struktura umožňuje rychle procházet řádky tabulky na základě indexového klíče a načítat požadované záznamy najednou. Nebude muset číst celou tabulku.
Typy indexů SQL Server
Mezi hlavní typy věnujeme pozornost shlukovaným a neshlukovaným indexům.
Clusterový index seřadí skutečná data na datových stránkách podle hodnot seskupeného indexového klíče. Ukládá data na úrovni „listu“ indexu, což zajišťuje možnost vytvořit pouze jeden seskupený index v každé tabulce. Seskupený index se vytvoří automaticky, když se v tabulce haldy objeví omezení primárního klíče.
Neshlukovaný index obsahuje hodnotu klíče indexu a ukazatel na zbytek řádkových sloupců v hlavní tabulce. Je to „listová“ úroveň indexu s možností vytvořit až 999 neseskupených indexů v každé tabulce.
Pokud ve vaší tabulce není vytvořen žádný seskupený index, nazývá se tabulka „Tabulka haldy“. Taková tabulka nemá žádná kritéria pro určení pořadí dat uvnitř stránek a řazení a propojení stránek.
Když je na této tabulce vytvořen seskupený index, nazýváme setříděnou tabulku shlukovou tabulkou.
SQL Server poskytuje i další typy indexů:
- Unikátní index vynucuje jedinečnost hodnot sloupců;
- Obsahový index obsahuje všechny sloupce požadované dotazem;
- Složený index obsahuje více sloupců v klíči indexu;
- Další konkrétní typy indexů jsou indexy XML, Spatial a Columnstore.
Výhodou indexu SQL Server je, že zvyšuje výkon dotazů. Funguje to však, pokud je správný pouze index. Pokud jej špatně navrhnete, negativně to ovlivní výkon dotazů a spotřebuje zdroje SQL Serveru k ukládání a údržbě neužitečných indexů.
Výběr nejlepšího indexu, který opraví všechny problémy, není snadný úkol. Přidání nového indexu může urychlit proces načítání dat, ale zpomaluje procesy úpravy dat. Jakákoli změna provedená v podkladové tabulce se projeví přímo ve všech souvisejících indexech, aby byla data konzistentní.
To je důvod, proč byste si měli prostudovat a otestovat dopad nového indexu před jeho vytvořením v produkčním prostředí. Je také nutné sledovat jeho dopad a využití po nasazení do produkčního prostředí.
Faktory, které je třeba vzít v úvahu při navrhování nového indexu SQL Server
Prvním faktorem je typ zátěže databáze . Předpokládejme, že se zabýváme pracovní zátěží OLTP s velkým počtem operací zápisu. Vyžaduje co nejmenší počet indexů. Dalším případem je zátěž OLAP s mnoha operacemi čtení – bude vyžadovat co nejvíce indexů, aby se urychlilo načítání dat.
Také se musíte podívat na velikost tabulky . SQL Server Engine upřednostňuje skenování podkladové tabulky přímo, namísto plýtvání časem a zdroji výběrem nejlepšího indexu pro načítání dat z této malé tabulky.
Jakmile se rozhodnete pro tuto tabulku vytvořit index, musíte identifikovat typ indexu, který bude sloužit vašemu dotazu . Zde určíte sloupce přidané do indexového klíče. Základem je datový typ sloupce a pozice v predikátech dotazu a podmínkách spojení.
Tyto faktory by měly zaručit nejlepší výkon načítání dat ve správném pořadí a udržovat index co nejkratší a nejjednodušší.
Dalším faktorem, který je třeba vzít v úvahu při navrhování nového indexu, je úložiště indexu . Doporučuje se vytvořit indexy bez klastrů na samostatné skupině souborů a na disku. Tímto způsobem izolujete I/O operace prováděné na stránkách indexových dat od databázových datových souborů.
Zvažte nastavení indexu FILLFACTOR , která určuje procento prostoru na každé stránce na úrovni listu vyplněné daty (hodnota se liší od výchozích 0 nebo 100 procent). Cílem je ponechat na každé stránce dat indexu místo pro nově vložené nebo aktualizované záznamy. Minimalizuje také výskyt rozdělení stránek, které by mohlo vést k problému fragmentace indexu.
Správa indexu
Role správce databáze při zvyšování výkonu dotazů pomocí indexů SQL Server není omezena na vytváření indexu. Měli byste proaktivně sledovat používání indexu, abyste zjistili jeho kvalitu. Kromě toho musíme index pravidelně udržovat, abychom vyřešili problémy s fragmentací.
SQL Server Management Studio se svou robustní funkcí vytváření sestav poskytuje správcům databází nejužitečnější statistická data. Jedním z těchto integrovaných přehledů je Statistika využití indexu :
Sestava Statistika využití indexu popisuje, jak jsou indexy databáze používány ve formě:
- Hledá :kolikrát index používá SQL Engine k nalezení konkrétního řádku.
- Prohledávání :počet, kolikrát stroj SQL naskenuje listové stránky indexu.
- Vyhledávání :kolikrát byl neklastrovaný index použit jako klastrovaný index k načtení zbytku sloupců, které nejsou uvedeny v neklastrovaném indexu.
- Aktualizace :počet změn indexových dat.
Všimněte si, že primárním účelem vytvoření indexu je provést operaci vyhledávání indexu, jak je uvedeno níže:
Předchozí zpráva významně pomáhá při určení, zda SQL Server využívá tyto indexy k urychlení procesu načítání dat či nikoli. Pokud se ukáže, že některý konkrétní index nefunguje tak, jak by měl, zrušte jej a nahraďte jej lepším.
Druhou zprávou poskytovanou SSMS je Index Physical Statistics . Vrací statistické informace o procentu fragmentace indexu na každý oddíl indexu s počtem stránek na každém oddílu indexu.
Doporučuje také, jak opravit problémy s fragmentací indexu přebudováním nebo reorganizací indexu podle procenta fragmentace, jak je uvedeno níže:
Chcete-li použít doporučení uvedená v sestavě, můžete pro každý index spustit příkaz defragmentace indexu. Nebo můžete vytvořit plán údržby pomocí SSMS, abyste udrželi index tím nejlepším způsobem.
dbForge Index Manager
dbForge Index Manager je doplněk SSMS, který slouží k detekci a opravě problémů s fragmentací indexů SQL Server.
Je to také centralizovaný nástroj, který umožňuje detekovat procento fragmentace indexu napříč databázemi. Tyto problémy můžete vyřešit provedením opětovného sestavení indexu. Dalším způsobem je reorganizace operací na základě závažnosti fragmentace tohoto indexu. Mezi další možnosti patří generování skriptů T-SQL pro provádění příkazů souvisejících s indexem, export výsledků analýzy indexu pro pozdější použití a použití rozhraní příkazového řádku k automatizaci úloh údržby indexu.
dbForge Index Manager je k dispozici na stránce stahování Devart. Můžete jej nainstalovat do svého počítače pomocí jednoduchého průvodce instalací. Po úspěšné instalaci je tento doplněk připraven k použití.
Chcete-li jej použít v rámci SSMS, klikněte pravým tlačítkem na databázi a zvolte Spravovat fragmentaci indexu ze seznamu Správce indexů:
V okně Správce indexů můžete filtrovat název databáze, který vás zajímá.
Klikněte na Znovu analyzovat pro provedení kontroly fragmentace indexu pro vybranou databázi. Automaticky zobrazuje statistiku fragmentace indexu pro všechny indexy vytvořené ve vybrané databázi během tohoto procesu.
Nástroj Index Manager také doporučuje akce k vyřešení problémů s fragmentací indexu na základě procenta fragmentace:
Kontrola indexů v části Požadované akce v předchozím okně umožňuje exportovat seznam akcí jako zprávu CSV. Umožňuje vám provést navrhovanou opravu reorganizací nebo přebudováním problematických indexů přímo z dané stránky nebo vygenerováním skriptu, který to provede později:
Oprava fragmentace indexu v našem scénáři bude následující:
Pokud spustíte předchozí skript nebo kliknete na Opravit a poté Znovu analyzovat výsledkem je, že problém s fragmentací je vyřešen přímo:
Tímto způsobem využíváme výhody dbForge Index Manager k analýze a identifikaci problémů s fragmentací indexu a poté je nahlásíme nebo opravíme přímo ze stejného místa.
Užitečný nástroj
dbForge Index Manager přináší chytré opravy indexů a fragmentaci indexů přímo do SSMS. Nástroj umožňuje rychle shromažďovat statistiky fragmentace indexu a detekovat databáze, které vyžadují údržbu. Můžete okamžitě znovu sestavit a reorganizovat indexy SQL Server ve vizuálním režimu nebo generovat skripty SQL pro budoucí použití. dbForge Index Manager pro SQL Server výrazně zvýší váš výkon bez velkého úsilí.