Sledování efektivity MS SQL Serveru. Praktická doporučení. Použití SQL Profiler (profiler)

Při naší práci se poměrně často setkáváme se situací, kdy je určitý požadavek pomalý a z textu požadavku nejsou patrné žádné zjevné problémy. Obvykle je v tomto případě nutné prozkoumat problém na hlubší úrovni. Zpravidla je potřeba se podívat na text SQL dotazu a jeho plán a v tom nám SQLProfiler pomáhá.

Co je SQL Profiler a proč je potřeba?

SQLProfiler je program, který je dodáván s MS SQL Server a je navržen tak, aby zobrazoval všechny události, které se vyskytnou na serveru SQL, nebo jinými slovy zaznamenával trasování. Proč může programátor 1C potřebovat SQLProfiler? Alespoň získat text dotazu v SQL a vidět jeho plán. To lze samozřejmě provést pomocí technologického časopisu, ale to vyžaduje určité dovednosti a plán v technickém časopise není tak krásný a čitelný. V profileru si můžete prohlédnout nejen textový, ale i grafický plán provádění dotazů, což je dle mého názoru mnohem pohodlnější. Profiler můžete také použít k určení: požadavků delších než určitý čas, požadavků na konkrétní tabulku čekajících na uzamčení, časových limitů uváznutí a mnoho dalšího...

Analýza dotazů pomocí SQL Profiler

Profiler se nejčastěji používá k analýze dotazů. Zpravidla nemusíme sledovat všechny dotazy, často potřebujeme vidět, jak je určitý dotaz v jazyce 1C přeložen do SQL a vidět jeho plán provádění. Můžeme to například potřebovat k určení, proč dotaz běží pomalu, nebo jsme napsali velký dotaz a chceme se ujistit, že tělo SQL dotazu neobsahuje spojení s poddotazem. Chcete-li požadavek zachytit ve trasování, postupujte takto:

1. Spusťte SQL Profiler Start - Všechny programy - Microsoft SQL Server 2008 R2 - Nástroje produktivity - SQLProfiler
2. Vytvořte nový soubor trasování – Vytvořte trasování (Ctrl+N)
3. Zadejte server DBMS, na kterém je naše databáze umístěna, a klikněte na „Připojit“.

Přirozeně vám nic nebrání ve sledování serveru DBMS, který je umístěn na jiném počítači. 4. V okně „Vlastnosti trasování“, které se zobrazí, přejděte na druhou kartu „Vybrat události“

5. Nyní musíme specifikovat události a vlastnosti těchto událostí, které chceme vidět ve trasování. Potřebujeme dotazy a plány dotazů, takže musíme povolit příslušné události. Pro zobrazení úplný seznam vlastnosti a události, povolte příznaky „Zobrazit všechny sloupce“ a „Zobrazit všechny události“. Dále je třeba vybrat pouze události zobrazené na obrázku níže, všechny ostatní události je třeba deaktivovat.


Popis události: ShowplanStatisticsProfile- textový plán splnit požadavek.
ShowplanXMLStatisticsProfile - grafický plán provádění dotazů.
RPC:Completed - text požadavku, pokud se provádí jako procedura (pokud se provádí požadavek 1C s parametry).
SQL:BatchCompleted - text dotazu, pokud je spuštěn jako běžný dotaz (pokud byl dotaz 1C proveden bez parametrů).

6. Nyní je potřeba nastavit filtr pro události. Pokud tak neučiníte, zobrazí se dotazy pro všechny databáze umístěné na tomto serveru DBMS. Klikněte na tlačítko „Filtry sloupců“ a zadejte filtr podle názvu databáze

Nyní uvidíme ve trasování pouze požadavky do databáze „TestBase_8_2“ Pokud chcete, můžete nastavit filtr na další pole, z nichž nejzajímavější jsou: Duration (Duration), TextData (obvykle text požadavku) a. RowCounts (počet řádků vrácených požadavkem).

Pokud například potřebuji zachytit všechny požadavky na tabulku „_InfoRg4312“ trvající déle než 3 sekundy v databázi „TestBase_8_2“, udělám:
a) Filtrujte podle databáze, příklad uvedený výše
b) Filtrujte podle trvání v milisekundách.

C) Filtrujte podle textu požadavku


Zde specifikujeme masku. Pokud potřebujete sledovat dotazy, které přistupují k více tabulkám, vytvořte několik prvků v části „Podobné“. Všechny podmínky filtru spolupracují.

7. Nyní můžete spustit trasování. Klikněte na „Spustit“, poté začne trasování fungovat a uvidíte události, které jste nakonfigurovali k zobrazení a které spadají pod vaše filtry. K ovládání trasování můžete použít tlačítka na panelu příkazů.


Zleva doprava: Guma - vymaže okno trasování, Start - spustí trasování, Pauza - pozastaví trasování, kliknutím na Start obnoví trasování, Stop - zastaví trasování

8. Samotné okno trasování se skládá ze dvou částí. Nahoře jsou události a vlastnosti události. Spodní část zobrazuje různé informace v závislosti na typu událostí. V našem případě se zde zobrazí buď text požadavku, nebo jeho plán.

9. Proveďme požadavek v konzole dotazu 1C a uvidíme, jak se projeví v profilovači.


Stopa ukazuje, že žádostí bylo několik a pouze jedna z nich byla naše. Ostatní požadavky jsou servisní požadavky.

10. Z vlastností událostí můžete pochopit: kolik sekund byl dotaz proveden (Duration), kolik bylo logických čtení (Reads), kolik řádků dotaz vrátil jako výsledek (RowCounts) atd. V mém případě dotaz běžel 2 milisekundy, provedl 4 logická čtení a vrátil 1 řádek.

11. Pokud přejdeme o jednu událost nahoru, můžeme vidět plán dotazů v grafické podobě.
Jak je vidět z plánu, vyhledávání se provádí indexem podle ceny, i když tento plán nelze nazvat ideálním, protože index nepokrývá, pole kódu a názvu se získá pomocí KeyLookup, který zabere 50 % času.


Pomocí kontextového menu lze uložit grafický plán samostatný soubor s příponou *.SQLPlan a otevřete jej v profilovači na jiném počítači nebo pomocí pokročilejšího programu SQL Sentry Plan Explorer.

12. Pokud půjdeme ještě výš, uvidíme stejný plán dotazů, ale v textové podobě. Právě tento plán se zobrazuje v TZ, TsUP a dalších nástrojích pro sledování výkonu 1C. K jeho analýze doporučuji použít pokročilé textový editor podsvícení, například Notepad++.

13. Používám nabídku „File-Save As“, do které lze uložit celou stopu různé formáty:
a) Ve formátu samotného profileru, tzn. s příponou *.trc
b) Ve formátu xml
c) Ze stopy můžete vytvořit šablonu. Viz další bod.
d) Trasování můžete uložit jako databázovou tabulku. Pohodlný způsob, pokud potřebujeme najít například nejpomalejší požadavek v celém trace nebo vybrat požadavky podle nějakého parametru. Soubor - Uložit jako - Tabulka trasování - Vyberte server DBMS a připojte se k němu Dále je třeba vybrat databázi na zadaném serveru a zadat název tabulky, do které bude trasování uloženo. Můžete vybrat existující tabulku nebo napsat nový název a tabulka se pak automaticky vytvoří ve vybrané databázi.

Je třeba vzít v úvahu, že Duration se v tabulce ukládá v miliontinách sekundy a při zobrazení výsledku je vhodné převést hodnotu na milisekundy. Do tabulky je také přidán sloupec RowNumber, který ukazuje číslo tohoto řádku ve trasování.

14. Potřebujete-li často používat profiler k analýze požadavků, pak vás nastavení potřebných filtrů a událostí rychle omrzí a zabere také spoustu času. Na pomoc přicházejí šablony trasování, kde specifikujeme potřebné filtry a pořadí sloupců a při vytváření nového trasování pak jednoduše vybereme tuto šablonu. Pro vytvoření šablony použijte menu Soubor - Šablony - Nová šablona

Na první záložce je vše jednoduché. Označíme typ serveru, název šablony a v případě potřeby nastavíme příznak, aby se tato šablona používala jako výchozí. Na druhé záložce vybíráme události a konfigurujeme filtry, jak již bylo uvedeno výše. Doporučuji také upravit pořadí sloupců ve trasování, což šetří čas při analýze dotazů. Například mi přijde pohodlnější použít následující pořadí.

Nyní při vytváření nového trasování můžete jednoduše zadat požadovanou šablonu, po jejímž vyplnění se na druhé záložce automaticky vyplní všechny filtry a události.

Samozřejmě, že zde nejsou uvedeny všechny způsoby použití tohoto úžasného nástroje, pokud bude zájem ze strany publika, v budoucnu bude možné rozšířit sbírku článků na toto téma.

Při naší práci se poměrně často setkáváme se situací, kdy je určitý požadavek pomalý a z textu požadavku nejsou patrné žádné zjevné problémy. Obvykle je v tomto případě nutné prozkoumat problém na hlubší úrovni. Zpravidla je potřeba se podívat na text SQL dotazu a jeho plán a v tom nám pomáhá SQL Profiler.

Co je SQL Profiler a proč je potřeba?

SQL Profiler je program dodávaný s MS SQL Serverem a je určen k prohlížení všech událostí, které se vyskytují na SQL serveru, nebo jinými slovy k zaznamenávání trasování.

Proč může programátor 1C potřebovat SQL Profiler?

Alespoň získat text dotazu v SQL a vidět jeho plán. To lze samozřejmě provést pomocí technologického časopisu, ale to vyžaduje určité dovednosti a plán v technickém časopise není tak krásný a čitelný.

V profileru si můžete prohlédnout nejen textový, ale i grafický plán provádění dotazů, což je dle mého názoru mnohem pohodlnější.

Profiler můžete také použít k určení:

žádosti déle než určitou dobu

dotazy na konkrétní tabulku

čekání na zablokování

časové limity

uváznutí

a mnohem víc…

Analýza dotazů pomocí SQL Profiler

Profiler se nejčastěji používá k analýze dotazů. Zpravidla nemusíme sledovat všechny dotazy, často potřebujeme vidět, jak je určitý dotaz v jazyce 1C přeložen do SQL a vidět jeho plán provádění. Můžeme to například potřebovat k určení, proč dotaz běží pomalu, nebo jsme napsali velký dotaz a chceme se ujistit, že tělo SQL dotazu neobsahuje spojení s poddotazem.

Chcete-li požadavek zachytit ve trasování, postupujte takto:

1. Spusťte SQL Profiler

Start - Všechny programy - Microsoft SQL Server 2008 R2 - Nástroje produktivity - SQL Profiler

2. Vytvořte novou stopu

Soubor – Vytvořit trasování (Ctrl+N)
3. Zadejte server DBMS, na kterém je naše databáze umístěna, a klikněte na „Připojit“.

Přirozeně vám nic nebrání ve sledování serveru DBMS, který je umístěn na jiném počítači.

4. V okně „Vlastnosti trasování“, které se zobrazí, přejděte na druhou kartu „Vybrat události“

5. Nyní musíme specifikovat události a vlastnosti těchto událostí, které chceme vidět ve trasování.

Potřebujeme dotazy a plány dotazů, takže musíme povolit příslušné události. Chcete-li zobrazit úplný seznam vlastností a událostí, povolte příznaky „Zobrazit všechny sloupce“ a „Zobrazit všechny události“.

Popis akcí:

ShowplanStatisticsProfile – plán provádění textových dotazů

ShowplanXMLStatisticsProfile – grafický plán provádění dotazů

RPC:Completed – text požadavku, pokud se provádí jako procedura (pokud se provádí požadavek 1C s parametry).

SQL:BatchCompleted – text dotazu, pokud se provádí jako běžný dotaz (pokud byl dotaz 1C proveden bez parametrů).

6. Nyní je potřeba nastavit filtr pro události. Pokud tak neučiníte, zobrazí se dotazy pro všechny databáze umístěné na tomto serveru DBMS.

Klikněte na tlačítko „Filtry sloupců“ a zadejte filtr podle názvu databáze

Nyní uvidíme ve trasování pouze dotazy do databáze „TestBase_8_2“.

V případě potřeby můžete filtrovat podle dalších polí, z nichž nejzajímavější jsou: Duration, TextData (obvykle text požadavku) a RowCounts (počet řádků vrácených požadavkem).

Pokud například potřebuji zachytit všechny požadavky na tabulku „_InfoRg4312“ trvající déle než 3 sekundy v databázi „TestBase_8_2“, udělám:

a) Filtrujte podle databáze, příklad uvedený výše

b) Filtrujte podle trvání v milisekundách.

c) Filtrujte podle textu požadavku

Zde specifikujeme masku. Pokud potřebujete sledovat dotazy, které přistupují k více tabulkám, vytvořte několik prvků v části „Podobné“. Všechny podmínky filtru spolupracují.

7. Nyní můžete spustit trasování. Klikněte na „Spustit“, poté začne trasování fungovat a uvidíte události, které jste nakonfigurovali k zobrazení a které spadají pod vaše filtry.

K ovládání trasování můžete použít tlačítka na panelu příkazů.

Zleva doprava:

Eraser – vymaže okno sledování

Start – spustí trasování

Pauza – pozastaví trasování, když kliknete na Start, trasování se obnoví

Stop – zastaví sledování

8. Samotné okno trasování se skládá ze dvou částí. Nahoře jsou události a vlastnosti události.

Spodní část zobrazuje různé informace v závislosti na typu událostí. V našem případě se zde zobrazí buď text požadavku, nebo jeho plán.

9. Proveďme požadavek v konzole dotazu 1C a uvidíme, jak se projeví v profilovači.

Stopa ukazuje, že žádostí bylo několik a pouze jedna z nich byla naše. Ostatní požadavky jsou servisní požadavky.

10. Z vlastností událostí můžete pochopit: kolik sekund byl dotaz proveden (Duration), kolik bylo logických čtení (Reads), kolik řádků dotaz vrátil jako výsledek (RowCounts) atd.

V mém případě dotaz běžel 2 milisekundy, provedl 4 logická čtení a vrátil 1 řádek.

11. Pokud přejdeme o jednu událost nahoru, můžeme vidět plán dotazů v grafické podobě.

Jak je vidět z plánu, vyhledávání se provádí indexem podle ceny, i když tento plán nelze nazvat ideálním, protože index nepokrývá, pole kódu a názvu se získá pomocí KeyLookup, který zabere 50 % času.

Pomocí kontextového menu lze grafický plán uložit jako samostatný soubor s příponou *.SQLPlan a otevřít v profileru na jiném počítači nebo pomocí pokročilejšího programu SQL Sentry Plan Explorer.

12. Pokud půjdeme ještě výš, uvidíme stejný plán dotazů, ale v textové podobě.

Právě tento plán se zobrazuje v TZ, TsUP a dalších nástrojích pro sledování výkonu 1C. K jeho analýze doporučuji použít pokročilý textový editor s podsvícením, např. Notepad++.

a) Ve formátu samotného profileru, tzn. s příponou *.trc

b) Ve formátu xml

c) Ze stopy můžete vytvořit šablonu. Viz další bod.

Dále je třeba vybrat databázi na zadaném serveru a zadat název tabulky, kam bude trasování uloženo. Můžete vybrat existující tabulku nebo napsat nový název a tabulka se pak automaticky vytvoří ve vybrané databázi.

Je třeba vzít v úvahu, že Duration se v tabulce ukládá v miliontinách sekundy a při zobrazení výsledku je vhodné převést hodnotu na milisekundy. Do tabulky je také přidán sloupec RowNumber, který ukazuje číslo tohoto řádku ve trasování.

14. Potřebujete-li často používat profiler k analýze požadavků, pak vás nastavení potřebných filtrů a událostí rychle omrzí a zabere také spoustu času.

Na pomoc přicházejí šablony trasování, kde specifikujeme filtry a pořadí sloupců, které potřebujeme, a při vytváření nového trasování pak jednoduše vybereme tuto šablonu.

Pro vytvoření šablony použijte menu Soubor – Šablony – Nová šablona

Na první záložce je vše jednoduché. Označíme typ serveru, název šablony a v případě potřeby nastavíme příznak, aby se tato šablona používala jako výchozí.

Na druhé záložce vybíráme události a konfigurujeme filtry, jak již bylo uvedeno výše.

Nyní při vytváření nového trasování můžete jednoduše zadat požadovanou šablonu, po jejímž vyplnění se na druhé záložce automaticky vyplní všechny filtry a události.

Samozřejmě, že zde nejsou uvedeny všechny způsoby použití tohoto skvělého nástroje, myslím, že v budoucnu přidám do sbírky článků na toto téma.

Pokud máte stále dotazy k používání SQL Profiler, zeptejte se je v komentářích, rád odpovím.

Dnes změříme výkon naší aplikace pomocí Vizuální studio Nástroj pro profilování.

Nástroj pro profilování sady Visual Studio umožňuje vývojářům měřit a vyhodnocovat výkon aplikací a kódu. Tyto nástroje jsou plně zabudovány do IDE a poskytují vývojářům bezproblémové ovládání.
V tomto tutoriálu budeme profilovat aplikaci krok za krokem PeopleTrax použitím Vzorkování A Instrumentace Techniky profilování k identifikaci problémů s výkonem aplikace.

Spousta obrázků.

Příprava

Pro práci s tímto průvodcem budete potřebovat:
  • Microsoft Visual Studio 2010
  • Průměrná znalost jazyka C#
  • Kopii testovací aplikace PeopleTrax, kterou si můžete stáhnout z MSDN Code Gallery

Metody profilování

Vraťme se trochu zpět od hlavního tématu článku a zamysleme se nad možnými způsoby profilování. Tuto kapitolu lze přeskočit použité metody profilování budou stručně popsány před použitím.
Vzorkování
Vzorkování— shromažďuje statistické údaje o provozu aplikace (při profilování). Tato metoda je lehká, a proto je v důsledku jejího fungování velmi malá chyba v získaných datech.

V každém určitém časovém intervalu se shromažďují informace o zásobníku hovorů. Na základě těchto údajů se vypočítá produktivita. Používá se pro počáteční profilování a pro identifikaci problémů souvisejících s používáním procesoru.

Instrumentace
Instrumentace— shromažďuje podrobné informace o provozní době každé volané funkce. Používá se k měření výkonu I/O operací.

Metoda vloží svůj kód do binárního souboru, který zaznamenává informace o časování pro každou funkci v souboru a pro každou funkci, která je v něm volána.

Zpráva obsahuje 4 hodnoty pro zobrazení uplynulého času:

  • Uplynulé včetně- celkový čas strávený výkonem funkce
  • Aplikace včetně- čas strávený prováděním funkce, kromě času volání operačního systému.
  • Uplynulý exkluzivní- čas strávený prováděním kódu v těle. Čas strávený funkcemi volanými cílovou funkcí.
  • Exkluzivní aplikace- čas strávený prováděním kódu v těle. Eliminuje ztrátu času voláním operační systém a čas strávený prováděním funkcí volaných cílovou funkcí.
Konkurence
Konkurence– shromažďuje informace o vícevláknových aplikacích (informace o ladění vícevláknových aplikací naleznete v „Průvodci laděním vícevláknových aplikací v sadě Visual Studio 2010“). Metoda shromažďuje podrobné informace o zásobníku volání, kdykoli jsou konkurenční vlákna nucena čekat na přístup ke zdroji.
.NET paměti
.NET paměti- Profiler shromažďuje informace o typu, velikosti a počtu objektů, které byly vytvořeny v distribuci nebo byly zničeny sběračem odpadu. Profilování paměti nemá téměř žádný vliv na výkon aplikace jako celku.
Interakce úrovně
Interakce úrovně– přidá do profilovacího souboru informace o synchronních hovorech ADO.NET mezi stránkou ASP.NET nebo jiné aplikace a SQL server. Údaje zahrnují počet a čas hovorů a také maximální a minimální dobu.

Tímto končíme naše úvahy o metodách profilování a budeme se i nadále učit, jak profilovat aplikace.

Profilování metodou Sampling

Vzorkování je technika profilování, která periodicky dotazuje daný proces za účelem určení aktivní funkce. Výsledek ukazuje, kolikrát byla funkce na začátku zásobníku volání během testování.
Profilování
Otevřete testovací projekt PeopleTrax. Nastavte konfiguraci na Uvolnění(Ve verzi Debug jsou zabudovány další informace pro ladění aplikace a budou mít špatný vliv na přesnost výsledků profilování).

V nabídce Analyzovat klikněte na Spusťte Průvodce výkonem.

V tomto kroku musíte vybrat metodu profilování. Vyberte CPU Sampling (doporučeno) a klikněte na Další.

Vybereme si, kterou aplikaci budeme profilovat, to je PeopleTrax a tlačítko Další. Dále klikněte na Dokončit a profiler a naše aplikace se automaticky spustí. Na obrazovce vidíme program PeopleTrax. zmáčknout tlačítko Získejte lidi, počkejte na dokončení práce a Export dat. Zavřete poznámkový blok a program a profiler vygenerují zprávu.

Profiler vygeneroval zprávu (*.vsp)

Analýza zprávy o metodě vzorkování
V souhrn po celou dobu profilování se zobrazuje graf využití procesoru. Seznam Horká cesta zobrazuje vlákna volání, která vykazovala největší aktivitu. A na seznamu Funkce vykonávající většinu individuální práce(jehož název mluví sám za sebe) - funkce, které zabíraly b Ó delší dobu procesu v těle těchto funkcí.

Při pohledu na seznam Horká cesta vidíme, že metoda PeopleNS.People.GetNames zaujímá téměř poslední místo ve vláknu výzvy. Poté jej lze blíže studovat, aby se zlepšil výkon. Klikněte na PeopleNS.People.GetNames a otevírá se před námi Detaily funkce.

Toto okno obsahuje dvě části. Výdajové okno poskytuje grafické znázornění jak funkce fungují, a příspěvek funkce a jejích volajících k počtu vzorkovaných instancí. Dotyčnou funkci můžete změnit kliknutím na ni myší.

Zobrazení kódu funkce zobrazí kód metody, když je k dispozici, a zvýrazní nejdražší řádky ve vybrané metodě. Když je zvolena metoda GetNames můžete vidět, že čte řetězce z prostředků aplikace pomocí StringReader, přidáním každého řádku do ArrayList. Neexistují žádné zřejmé způsoby, jak tuto část vylepšit.

Protože PeopleNS.People.GetPeople jediný, kdo volá GetNames- lis GetPeople. Tato metoda se vrací ArrayList objektů PersonInformationNS.PersonInformation se jmény osob a společností vrácených metodou GetNames. Nicméně, GetNames volá se dvakrát při každém vytvoření Osobní informace. (To je znázorněno žlutým a červeným zvýrazněním). Je zřejmé, že metodu můžete snadno optimalizovat vytvořením seznamů pouze jednou na začátku metody.

Alternativní verze GetPeople je také v kódu a nyní jej povolíme. Chcete-li to provést, musíte určit OPTIMIZED_GETPEOPLE jako symbol podmíněné kompilace v okně vlastností projektu Lidé A PeopleTrax. A ano, pokud chcete opakovat mé experimenty, musíte opravit chybu v projektu. V konstruktoru optimalizované třídy není název zdrojů zapsán správně: potřebujete PeopleNS.Resources společně s PeopleNS.Resource. Pokud se to nezmění, všechno skončí hroznými chybami.

Optimalizovaná metoda nahradí starou při příštím sestavení.

Restartujte profilování v aktuální relaci kliknutím Spusťte pomocí profilování v okně Průzkumník výkonu. Klikněte na Získejte lidi A Export dat. Zavřete poznámkový blok a program a profiler vygenerují novou zprávu.

Chcete-li porovnat dva přehledy, vyberte oba a RMB Porovnejte přehledy výkonu. Sloupec delta ukazuje rozdíl ve výkonu verzí Základní linie z pozdější doby Srovnání. Vybrat % vzorků včetně a Použít.

Jak vidíte, nárůst výkonu je patrný pouhým okem

Profilování metodou Instrumentation

Tato metoda je užitečná pro profilování I/O, zápisy na disk a síťovou komunikaci. Tato metoda poskytuje více informací než předchozí, ale vyžaduje více režie. Binární soubory získané po vložení doplňkový kód jsou větší než obvykle a nejsou určeny k nasazení.

Tentokrát se rozbor zaměříme na export dat, při kterém se do souboru poznámkového bloku zapisuje seznam osob.

Profilování
V Průzkumník výkonu Vybrat Instrumentace a klikněte na Zahájit profilování. Klikněte na Získat lidi. Po načtení lidí počkejte 10 sekund a klikněte na Exportovat data. Zavřete poznámkový blok a program. Profiler vygeneruje zprávu.
Analýza
Profiler zobrazí tento obrázek:

Nedostali jsme informace, které jsme chtěli. Pojďme data filtrovat. Konkrétně jsme čekali 10 sekund, abychom jednoduše odfiltrovali data profilování, která již nebyla potřeba. Označte od 13. do konce a stiskněte Filtrujte podle výběru. Další výsledek:

Horká cesta ukazuje, že metoda Concat zabere hodně času (je také první na seznamu funkcí s nejvíce individuální prací). Klikněte na Concat pro zobrazení podrobných informací o metodě.

To je jasné PeopleTrax.Form1.ExportData je jediná metoda, která volá Concat. Klikněte PeopleTrax.Form1.ExportData ve volání metod ( Funkce volající tuto funkci).

Pojďme analyzovat metodu v okně kódu. Všimněte si, že neexistuje žádné přímé volání na Concat. Spolu s tím existuje použití operandu += , které kompilátor nahradí metodami System.String.Concat. Jak už téměř každý ví, jakékoli změny řetězců v .NET vedou ke zničení stará verzeřetězec a vytvoření upraveného řetězce. Naštěstí má .NET třídu StringBuilder který je určen pro tento typ práce.

Projekt již používá optimalizovanou metodu StringBuilder. V projektu PeopleTrax přidejte proměnnou kompilace OPTIMIZED_EXPORTDATA. Uložíme a znovu spustíme profilovač a porovnáme sestavy. Okamžitě je zřejmé (a logicky pochopitelné), že jsme optimalizovali volání Concat (z 6000 na 0krát).

Po spuštění aplikace je vidět znatelné zlepšení výkonu. Je velmi důležité znovu spustit profilování, i když jsou patrná zlepšení. Kontrola nových dat po vyřešení problému může odhalit další problémy s výkonem aplikace.

Jedním z mých oblíbených nástrojů je SQL Server Profiler, často nazývaný jednoduše Profiler. Tento nástroj zobrazuje data o libovolném počtu podrobných událostí serveru SQL Server. Tyto události serveru lze zobrazit v okně Vlastnosti trasování (obrázek 49.3) a také je zaznamenat do souboru nebo tabulky pro pozdější analýzu. Filtry lze nastavit tak, aby registrovaly všechny události nebo jejich vybranou podmnožinu.

Puc. 49,2. V v tomto příkladu protokol měřiče zaznamená informace

o výkonu SQL Server v adresáři C:\Perf Logs

Nástroj SQL Server Profiler lze spustit z nabídky Nástroje v Management Studio nebo přímo ze složky SQL Server 2005. systémové menu Start. Chcete-li aktivitu zobrazit, musíte buď definovat nové trasování, nebo použít existující soubor.

S vydáním SP1 obdržel SQL Server Profiler ocenění Pozor! sledovat velké soubory dat na velkých počítačích.

Kromě toho se dříve při sledování analytické služby čas zobrazoval v jednotkách světového času (UTC). Nyní pomocí místního systémový čas. Dříve se úspěšně reprodukované události nepočítaly správně, což vedlo k tomu, že uživatel obdržel nesprávné statistiky. Tento problém byl vyřešen.

Definování nové stopy

Když je vytvořeno nové trasování (buď pomocí příkazu nabídky Soubor^Nová trasování nebo tlačítka na panelu nástrojů Nová trasování), vytvoří se také nové připojení k serveru SQL a otevře se dialogové okno Vlastnosti trasování (obrázek 49.4). Na záložce Obecné tohoto okna se konfiguruje trasování (zejména název, umístění souboru atd.) a na záložce Výběr událostí se definují události, data a filtry, které mají být protokolovány. Pokud je spuštěno trasování, lze tyto parametry zobrazit, ale nelze je změnit. Konfiguraci trasování lze uložit jako šablonu, aby bylo v budoucnu snazší vytvářet nová trasování.

Rýže. 49.4. Karta Events Selection okna Trace Properties umožňuje vybrat události sledované obslužným programem Profiler

Trasování lze prohlížet v reálném čase, ale data mohou být současně zapsána do souboru nebo tabulky serveru SQL. To se hodí na později prediktivní analýza, porovnání s údaji čítače monitoru systému nebo pro import do nástroje Database Engine Tuning Advisor.

Když jsou čtení zapsána do souboru, jsou zřetězena do 128 KB řetězců, aby se zlepšil výkon; podobně při zápisu do tabulky se data seskupují do několika řádků.

Chcete-li uložit data zachycená Profilerem pro pozdější analýzu, použijte vysoce výkonný souborová metoda, stejně jako sledování serveru (o tom si povíme později). Pokud chcete analyzovat data pomocí T-SQL instrukce, použijte úplně stejný přístup, ale po dokončení relace trasování otevřete výsledný soubor v nástroji Profiler a z nabídky vyberte příkaz Soubor^Uložit jako^Tabulku.

Výběr události

Karta Výběr událostí určuje seznam akcí provedených databázovým serverem, které zaznamená obslužný program Profiler. Podobně jako sledování výkonu může Profiler sledovat mnoho klíčových událostí serveru SQL Server. Pro zjednodušení nastavení výběru můžete použít výchozí šablony.

I Událost SQL Batch Completed je založena na provádění dávek T-SQL v

SVS jako celek (pakety oddělené terminátory), nikoli jednotlivé instrukce.

| * Na základě toho Profiler zaznamenává data pouze o jedné události, bez ohledu na to

Simo v závislosti na délce balení. Pro záznam provádění jednotlivých pokynů

DML používá událost SQL Statement Complete.

Ne všechny události lze použít k reprodukci stopy. Například událost SQL Batch Start lze přehrát, ale událost SQL Batch Complete nikoli.

V závislosti na událostech jsou k dispozici různá data pro sledování. Přestože se sloupec dat SPID zdá být volitelný, je klamavý.

Filtrování událostí

Program Profiler je schopen pro vás shromáždit tolik informací, že by snadno zaplnil diskovou jednotku během mrknutí oka. Naštěstí vám filtr programu (obrázek 49.5) pomůže omezit toto pole pouze na data, která vás zajímají.

Rýže. 49,6. SQL Server Profiler dokáže integrovat data sledování výkonu a synchronizovat je s monitorovanými událostmi

Použití trasování SQL

SQL Profiler se obvykle používá interaktivně a je dostačující pro přerušovaný sběr dat. Dlouhotrvající trasování však může snadno nashromáždit stovky tisíc záznamů, což může způsobit velmi specifické problémy na pracovní stanici, na které je trasování spuštěno. Řešením je vytvoření protokolu trasování přímo na serveru. Toto trasování způsobí malé dodatečné zatížení serveru; v tomto případě budou soubory zapsány v blocích po 128 kB.

V průmyslové systémy provádění trasování na straně serveru, zápis dat do souboru na serveru je nejlepší způsob shromažďování informací

o výkonu při minimalizaci dodatečného zatížení serveru.

Trasování prováděné na serveru lze definovat a implementovat pomocí sady systémových uložených procedur. Kód programu můžete napsat sami nebo pomocí programu SQL Server Profiler.

Jakmile je trasování nakonfigurováno a otestováno v SQL Server Profiler, vyberte z nabídky Soubor^Export^Definice trasování^Pro SQL Server 2005 a vygenerujte skript T-SQL, který může provádět trasování na straně serveru.

I Chcete-li zjistit, která trasování běží na serveru, dotazujte se

SVS namic pohled na řídicí systraces. Když se podíváte na výsledky I* tohoto dotazu, uvidíte další traceback. První * číslo je vždy tzv. default trace, který sbírá data pro SQL Server logy - nelze jej zastavit.

Chcete-li zastavit trasování serveru, použijte systémovou uloženou proceduru sp_trace_setstatus. Jeho první argument (traceid) je identifikátor trace a druhý určuje povahu akce. Hodnota nula pro parametr action způsobí zastavení trasování, hodnota jedna jej spustí a hodnota dva jej uzavře a odstraní. Následující kód zastaví trasování číslo 2.

SQL Profiler - softwarový nástroj, který se používá pro trasování SQL Server. "Trace" - relace shromažďování informací o provozu SQL Server 2008

Hlavní účel:

SQL Profiler používají administrátoři k:

· analýza aplikace;

· určení optimálnosti požadavků zasílaných na server;

· identifikace příkazů Transact-SQL, které při provádění způsobují chybu;

· shromažďování informací o aktivitě uživatele po dlouhou dobu;

· sledování provozu serveru v reálném čase.

Nové příležitosti:

A. Profilování analytických služeb;

b. profilování událostí integračních služeb;

C. schopnost zaznamenávat odečty čítačů z Monitoru výkonu při zaznamenávání informací o provedení příkazu;

d. Profiler přidal mnoho nových událostí a informačních zdrojů, které lze vybrat pro záznam do trasovacího souboru;

F. schopnost seskupovat události v okně profileru.

Práce s SQL Server Profiler

1. Spusťte SQL Server Profiler - z nabídky Start Programy SQL Server 2008 Performance Tools SQL Server Profiler.

2. V okně, které se otevře v nabídce Soubor Vybrat Nová stopa a připojit se k SQL server Server 2008, jehož provoz budeme sledovat.

3. V okně nakonfigurujte parametry relace Vlastnosti trasování, který se otevře automaticky před zahájením relace trasování (viz obr. 8.1).

Rýže. 8.1. Konfigurace možností trasování relace

A. Na kartě Všeobecné vyberte ze seznamu Použijte šablonu nejvhodnější šablonu. Šablona se vybírá pomocí nabídky Soubor à Šablony v SQL Server Profiler. Zpočátku máte k dispozici osm šablon:

1). Standardní (výchozí)- výchozí šablona, ​​která umožňuje sledovat všechny uložené procedury a příkazy Transact-SQL spuštěné k provedení;

2). SP_Counts- shromažďování informací o uložených procedurách a funkcích spuštěných k provedení seřazených podle názvu;

3). TSQL- shromažďování informací o všech příkazech Transact-SQL spuštěných k provedení na serveru s uvedením identifikátoru uživatelských procesů a času spuštění;

4). TSQL_Duration- podobně jako u předchozí šablony, ale místo informace o čase spuštění příkazu TSQL je zaznamenána doba jeho provedení;

5). TSQL_Grouped- kromě informací o kódu příkazu Transact-SQL a času jeho spuštění se zaznamenává také informace o názvu aplikace, účet uživatel v OS a uživatelský účet, který byl použit k připojení;



6). TSQL_Replay- záznam nejpodrobnějších informací o provedených příkazech Transact-SQL;

7). TSQL_SPs- kromě zaznamenávání informace o začátku běhu uložené procedury (SP:Starting) se zaznamenává informace o provedení každého z příkazů uložené procedury (SP:StmtStarting);

8). Ladění- používá se ke shromažďování informací nezbytných pro Database Tuning Advisor.

b. Na kartě Všeobecné pokud potřebujete zadat umístění, kam se ukládají informace o sledování:

1). Informace o sledování lze zaprotokolovat do souboru (ve výchozím nastavení 5 MB):

· parametr Povolit převrácení souboru určuje, zda se po zaplnění jednoho souboru automaticky vytvoří další. Název dalšího souboru bude stejný jako název předchozího, ale k jeho názvu bude přidáno číslo (1, 2, 3 atd.)

· parametr Server zpracovává trasovací data lze použít ke zvýšení spolehlivosti záznamu trasovacích informací. Po zaškrtnutí tohoto políčka bude server zpracovávat trasovací informace.

2). Informace o trasování lze uložit do tabulky serveru SQL. Automaticky se vytvoří tabulka s požadovanou sadou sloupců.

3). Pomocí parametru Povolit čas zastavení trasování Můžete určit čas, kdy se trasování automaticky vypne.

C. Na kartě Výběr událostí určit parametry pro sběr informací. V tabulce na této záložce musíte vybrat požadované události (v řádcích) a informace (ve sloupcích), které se k nim budou zaznamenávat. Chcete-li zobrazit všechny řádky a sloupce, musíte zaškrtnout políčka Zobrazit všechny události A Zobrazit všechny sloupce.

1). přes tlačítko Sloupcové filtry(Sloupcové filtry) konfigurovat filtry tak, aby shromažďovaly potřebné informace (sledovat akce provedené v konkrétní databázi nebo konkrétní aplikací nebo konkrétním uživatelem) – Jako nebo Ne jako;

2). pomocí tlačítka Uspořádat sloupce(Organize Columns) konfiguruje pořadí sloupců pro zobrazení nebo záznam v profileru s možností seskupovat data - sekce Group.

4. Po nastavení všech parametrů trasování klikněte na tlačítko Běh(Spustit) (viz obr. 8.2)

Rýže. 8.2. Zobrazení informací během relace trasování

V horní části okna jsou zobrazeny události probíhající na serveru a ve spodní části detailní informace pro každou událost (například kód příkazu SQL).

Možnosti dostupné v okně trasování:

1. Pokud je na kartě Uspořádat sloupce Ve vlastnostech šablony, které jste vybrali sloupce pro seskupení, můžete seskupit záznamy podle těchto sloupců v prohlížecím okně. Pro tento účel v nabídce Pohled poskytnutý příkaz Seskupené zobrazení;

2. Pokud je na seznamu Skupina byl umístěn pouze jeden sloupec, pak máte možnost použít režim zobrazení Souhrnný pohled(viz obr. 8.3). Tento režim se aktivuje pomocí příkazu Souhrnný pohled ze stejného menu Pohled.

Rýže. 8.3. Zobrazovací mód Souhrnný pohled

3. V profilovači můžete otevřít události uložené v souborech a trasovacích tabulkách. Pomocí nabídky je také možné opakovat zaznamenané operace Přehrát;

4. Informace o trasování můžete přidružit k čítačům výkonu Monitoru systému. Pro tohle:

· definovat trasovací relaci, během které musí být zaznamenány informace pro sloupce Doba spuštění A Čas ukončení;

· spustit relaci sledování se záznamem informací do souboru nebo tabulky. Zároveň shromážděte protokol o odečtech měřidel do souboru Monitor výkonu;

· OTEVŘENO shromážděné informace z trasovacího souboru v profileru a poté použijte příkaz Importujte údaje o výkonu z nabídky Soubor.