Profilování dotazů je způsob, jak zjistit, co se děje uvnitř černé skříňky výkonu SQL Serveru.
Uživatelé to mají snadné. DBA ne.
Přemýšlejte o jednoduchých možnostech, které uživatelé mají, když databázová aplikace běží špatně:
- Jdi si dát kávu a počkej.
- Urážejte počítač.
- Podejte stížnost ostatním uživatelům.
- Odeslat problémový lístek.
Není to Rileyho život ve srovnání s možnostmi, které máte jako DBA?
- Hledejte blokované relace.
- Zkontrolujte poměry požadavků na vyrovnávací paměť.
- Změřte maximální I/O čekání.
- Zkontrolujte očekávanou životnost stránky.
- Podívejte se, zda indexy chybí nebo zda je třeba je znovu sestavit.
- Hledejte zámky/deadlock.
- Zkontrolujte využití procesoru.
- Prohlédněte si protokol aplikace, zda neobsahuje zprávy o nedostatku paměti.
- Ujistěte se, že je databáze tempdb správně nakonfigurována.
Může to být kterýkoli z těchto softwarových problémů a obvykle vás vedou k řešení optimalizace dotazu nebo změně konfigurace. Nebo to může být hardwarový problém a řešením je koupit více paměti nebo výpočetního výkonu.
Vzhledem k tomu, že databázové aplikace jsou většinou o provádění velkého množství dotazů SQL, problémy s výkonem mají na serveru SQL Server mnoho míst, kde se lze skrýt. Pokud jste uživatel, můžete říci:„No, problém musí být někde uvnitř té černé skříňky. Není to moje práce.“
Ale jako DBA nemáte takový luxus. Musíte otevřít černou skříňku, vlézt dovnitř, najít nepořádek a opravit ho.
Profilování dotazů 101 s monitorováním výkonu serveru SQL
Obecně je vaším cílem při sledování výkonu serveru sledovat, jak si vaše dotazy SQL vedou v průběhu času a v průběhu růstu objemu transakcí na vašem SQL Serveru. Tohoto cíle můžete dosáhnout několika způsoby.
Podívejte se na plán vysvětlení
Plán vysvětlení ukazuje, co SQL Server udělá při provádění dotazu, včetně tabulek, které spojí, typu spojení, které provede, počtu řádků, kterých se dotkne, a indexů, které použije.
Co vám může říct plán vysvětlení? Jednak můžete vidět, jak zlepšit samotný dotaz, například odstraněním NESTED LOOP JOIN, který jeden z vývojářů databáze přidal k obrovské tabulce. Nebo můžete z plánu vysvětlení zjistit, že potřebujete vytvořit nebo znovu sestavit index pro určitou tabulku.
Plán vysvětlení je dobrým výchozím bodem pro profilování dotazů, ještě předtím, než skutečně spustíte podezřelé dotazy.
Proveďte dotaz
Chcete-li provést dotazy a zjistit, které prostředky ovlivňují za běhu, nejprve vytvořte trasování, abyste označili události, jak k nim dojde. Pomocí tras můžete zaznamenávat data a sledovat případné chyby. Profilovací nástroj ukládá data, která trasování zachytila, a zobrazuje je způsobem, který vám usnadní vyhledávání a odstraňování problémů s problematickými dotazy.
Kombinace tras a profilovacího nástroje může odpovědět na spoustu otázek:
- Které dotazy spotřebovávají nejvíce paměti?
- Jak dlouho trvá provedení každého dotazu?
- Jaké zámky SQL Server nastavuje pro každý dotaz?
- Které dotazy může SQL Server provádět z mezipaměti? Jak často to musí jít na disk?
- Kolik řádků zkoumá každý dotaz?
- Kolik požadavků za minutu databáze plní?
Nejpřesnější čtení získáte provedením dotazu ve vašich produkčních databázích, ale to může také zpomalit zpracování vašimi skutečnými zákazníky a uživateli. Pokud můžete, otestujte nejprve na vývojových nebo testovacích instancích, kde nesoutěžíte o paměť nebo I/O s vaší produkční instancí.
Když už jsme u zákazníků a uživatelů, vaším cílem při profilování dotazů je udělat je spokojenými. Profilování může snadno odhalit desítky problémů ve vaší databázi, ale důvod, proč jste otevřeli černou skříňku, je vyřešit ty nejbolestivější problémy. Po zachycení dat z jednoho nebo dvou dnů běžného používání můžete najít problémy s výkonem serveru SQL, které dělají vašim uživatelům největší potíže. Možná chybějící index zpomaluje načítání záznamů nebo příliš mnoho indexů zpomaluje vkládání záznamů a aktualizace databáze. Možná, že často používaný dotaz shromažďuje informace, které už nikoho nezajímají.
Používejte nástroje pro profilování moudře
Nástroje pro profilování vás zachrání od zdlouhavého procesu ručního nastavování každé události, filtru a volání procedury pro vše, co chcete sledovat. Vzhledem k tomu, že se toho v černé skříňce výkonu SQL Serveru děje tolik, můžete snadno zachytit příliš mnoho dat na to, abyste viděli les pro stromy.
Dobré nástroje vám umožní pečlivě vybrat, co sledujete, takže například nezaznamenáváte stovky událostí Lock:Acquired a zbytečně jimi nezaplňujete svůj displej. Pokud však potřebujete prozkoumat často se vyskytující událost, použijte filtry, jako je název aplikace nebo název tabulky.
Místo zápisu trasovacích dat do tabulky v databázi zvažte jejich uložení do vlastního samostatného souboru. To zabrání tomu, aby se režie trasování stala zátěží pro SQL Server a potenciálně zkreslovala výsledky. Pokud váš profilovací nástroj upřednostňuje data získaná z tabulky, můžete data ze souboru importovat do tabulky později.
Zlepšete sledování výkonu serveru SQL pomocí profilování dotazů
Vaši uživatelé se držte dál od černé skříňky výkonu SQL Serveru, ale vy nemusíte. Profilování dotazů je způsob, jak otevřete krabici, zjistíte, co se uvnitř děje, a začnete s odstraňováním problémů.
S jeho používáním však nečekejte, až budete mít potíže. Profilování dotazů je spíše jako kontrola oleje než výměna motoru. Pomáhá to s obvyklými povinnostmi správce databází aktualizovat zastaralé dotazy a upravovat design tak, aby vaše databáze držely krok se změnami v podnikání.