Pomocí SQL Profiler (profiler). Pomocí SQL Server Profiler

16.05.2000 Itzik Ben-Gan

Stejně jako obnovení zločinu pomáhá najít zločince, sledování databáze pomáhá identifikovat úzká místa a odstranit je.

Článek „Catch an Event“, publikovaný v předchozím čísle časopisu, popsal architekturu systému sledování SQL Server 7.0 a ukázal, jak graficky nastavit trasu SQL Profiler. Tentokrát budeme hovořit o tom, jak znovu vytvořit trasování pomocí SQL Profiler a jak určit automatické spuštění pomocí rozšířených uložených procedur trasování. Na základě tohoto výkonného základu můžete zkušeně používat SQL Profiler a uložené procedury k prozkoumání všeho od dlouhotrvajících dotazů až po složitá uváznutí.

Předběžná příprava pro reprodukci trasy

Pomocí SQL Profiler můžete opakovat průchod uložených tras pro ladění problematických aplikací, vytvářet testovací scénáře s různými situacemi z reálný život, konfigurace databází a mnoho dalšího. Pokud potřebujete trasu znovu sledovat, budete muset nějaké udělat přípravné práce. Nejprve musíte definovat trasování pro sledování konkrétních událostí a sloupců dat, které nejsou ty, které vás zajímají. Zachycování těchto dalších událostí a sloupců zajišťuje, že se všechny akce opakují přesně tak, jak se staly předtím. Zadruhé byste měli uložit výsledky trasování do souboru, tabulky nebo skriptu SQL.

Jakékoli opětovné spuštění vyžaduje zachycení událostí Connect, Disconnect, ExistingConnection a také RPC:Starting a SQL:BatchStarting. Navíc při přehrávání backendových kurzorů API (tj. serverových kurzorů, které jsou řízeny funkcemi kurzoru API), musíte zachytit události CursorExecute, CursorOpen a CursorPrepare. Přehrát připravená prohlášení SQL server Na druhou stranu byste měli přidat také události Exec Prepared SQL a Prepare SQL. Při reprodukci budete potřebovat sloupce, které budou obsahovat následující údaje: název aplikace, binární informace, ID připojení nebo ID procesu serveru (SPID), ID databáze, Třída události, Podtřída události, Název hostitele, Digitální informace, Název serveru, Uživatelské jméno SQL, Čas spuštění a Textové informace.

Je důležité si uvědomit, že při opětovném spuštění se zaznamenané události nesimulují, ale nastanou znovu. Mějte proto na paměti, že během počátečního procesu trasování jste s největší pravděpodobností změnili databázi. Například při přehrávání trasování, které obsahuje příkaz INSERT, se v tabulce může objevit duplicitní klíč. Vyhnout se podobné problémy, měli byste resetovat databázi, pokud se trasování přehrává na původním serveru (tj. serveru, na kterém bylo spuštěno původní trasování).

Pokud spouštíte opětovné spuštění na jiném serveru, je důležité zajistit, aby databáze na tomto serveru byla ve stejném stavu jako databáze na původním serveru. V tomto případě musíte použít stejná uživatelská jména, jejich pravomoci a identifikátory databáze, jaké byly použity na zdrojovém serveru.

Používání stejných identifikátorů vyžaduje zvláštní dovednosti a zkušenosti, zejména proto, že společnost Microsoft nepodporuje přímý přístup k systémové tabulce sysdatabases za účelem změny identifikátorů databáze. ID databáze můžete spárovat jiným způsobem. Chcete-li to provést, zkopírujte soubory uživatelské databáze ze zdrojového serveru na server, kde se bude skladba přehrávat, a poté ji na něm obnovte záložní kopie hlavní databáze ze zdrojového serveru. Alternativní způsob je obnovit záložní kopii databáze uživatelů pořízenou ze zdrojového serveru na serveru vybraném pro běh a poté tam obnovit záložní kopii hlavní databáze. V obou případech budou na serveru, kde se trasování přehrává, databázové soubory umístěny ve stejných adresářích jako na zdrojovém serveru a tabulky hlavního databázového systému budou obsahovat původní ID databáze. Chcete-li tyto problémy zcela odstranit, jednoduše odeberte sloupec ID databáze z trasování a nastavte výchozí databázi pro každého uživatele zachyceného během trasování.

Můžete také ovládat úroveň synchronizace skriptů a rychlost přehrávání. Vyberte Nastavení z nabídky Přehrát a přejděte do dialogového okna Přehrát SQL Server. Parametr Úroveň synchronizace, který řídí synchronizaci v rámci připojení, může nabývat následujících hodnot:

Plná synchronizace. Toto je výchozí hodnota. V tomto případě jsou všechny události, ke kterým došlo v jednom připojení, reprodukovány v původním pořadí. Částečná synchronizace. S touto hodnotou mohou události na jednom připojení začít dříve, než události již zaznamenané na jiných připojeních. Žádná synchronizace. S touto hodnotou parametru mohou události nastat bezprostředně po skončení předchozí události ve stejném připojení, tedy bez jakékoli synchronizace v rámci připojení.

Parametr rychlosti přehrávání, Rychlost přehrávání, lze nastavit na jednu z následujících hodnot:

Co nejrychleji. Toto je výchozí hodnota V tomto případě začne další událost ihned po skončení předchozí. Udržujte interval mezi událostmi. Tato hodnota zachovává původní časový interval mezi výskyty událostí. Udržujte vztah k počátečnímu času. S touto hodnotou se události vyskytují ve stejných časech vzhledem k zahájení přehrávání trasování jako v původním trasování.

Organizace přehrávání trasy

Předpokládejme, že chcete reprodukovat trasování provedení připravených příkazů SQL na straně serveru, což jsou příkazy Transact-SQL (T-SQL) odeslané uživatelem na server prostřednictvím ADO, OLE DB nebo ODBC. SQL Server 7.0 provádí příkazy SQL připravené na straně serveru pomocí pseudouložených procedur sp_prepare a sp_execute, které jsou volány klientskou aplikací.

Volání sp_prepare způsobí, že SQL Server připraví příkazy T_SQL pro spuštění jejich kompilací a ukládá plány provádění do mezipaměti. Při volání sp_execute SQL Server provede dříve uložené plány a pravděpodobně tak provede opakovaně. Každé volání uložené procedury generuje události RPC:BatchStarting, Prepare SQL a Exec Prepared SQL. Z tohoto důvodu musí být tyto události zahrnuty do definice trasy.

SQL Profiler obsahuje několik příkladů definic trasování, které můžete použít jako šablony. Včetně příkladu číslo 6, „T-SQL for Replay“, souvisejícího s opětovným spuštěním trasování. Tento příklad je užitečný pro specifikaci výstupu trasování generovaného během přehrávání. Chcete-li otevřít uložený výstup trasování pro přehrávání, vyberte Otevřít z nabídky Soubor a vyberte soubor, tabulku nebo skript SQL pro uložení informací shromážděných během trasování. Přehrávání můžete ovládat pomocí voleb uvedených v tabulce 1. Mohou být reprezentovány buď položkami nabídky Přehrát, nebo tlačítky na panelu nástrojů.

Použití rozšířených uložených procedur

Některé funkce trasování z SQL Profiler nejsou k dispozici. Patří mezi ně spuštění trasování podle plánu, spuštění, když nastane určitá událost, nebo když se spustí SQL Server. SQL Profiler navíc nelze nakonfigurovat k odesílání výsledků trasování do protokolu. Windows aplikace NT nebo Windows 2000. K provádění těchto funkcí a poskytování větší svobody ovládání programu Pro trasování můžete použít sadu rozšířených uložených procedur pod obecným názvem xp_trace*.

Podívejme se na principy použití těchto uložených procedur pomocí příkladu spuštění trasování sp_start_mytrace a uložené procedury zastavení trasování sp_stop_mytrace. První uložená procedura, sp_start_mytrace, definuje události trasování, datové sloupce, filtry a vytvoří frontu pro ukládání zachycených událostí. Poté načte události z fronty a umístí je do systémový soubor. Procedura sp_start_mytrace komunikuje s frontou událostí a sleduje její stav prostřednictvím popisovače fronty celých čísel, který procedura vytvoří při sestavení fronty. sp_stop_mytrace používá tento popisovač, když potřebuje zastavit řazení do fronty.

Sledování stavu popisovače fronty není snadný úkol. Přestože existuje mnoho metod, jak získat její hodnotu, nejjednodušší a nejfunkčnější je vytvořit tabulku, která bude zaznamenávat data o všech trasováních a jejich frontách, stejně jako čas zahájení trasování, uživatelské ID uživatele, který povolil trace a název počítače, ze kterého byla převzata spuštěna. Výpis 1 ukazuje příkazy, které vytvářejí takovou tabulku, nazývanou activetraces. Chcete-li vidět, jaké stopy jsou aktuálně zachycovány, stačí se podívat na tuto tabulku. Chcete-li zastavit trasování, jednoduše se v tabulce dotázejte na odpovídající deskriptor fronty.

Uložená procedura pro spuštění trasování

Pojďme si projít tyto dvě uložené procedury, abychom viděli, jak je trasování spuštěno a zastaveno. Uložená procedura, která začíná trasování, má čtyři volitelné vstupní parametry. První dva, @spid_filter a @dbid_filter, umožňují omezit informace shromážděné během trasování pouze na ty, které se týkají konkrétního procesu serveru (identifikovaného pomocí jeho SPID) a zadané databáze. Pokud tyto parametry nejsou zadány, bude trasování shromažďovat data ze všech procesů a databází. Parametr @email_address umožňuje přiřadit adresu E-mailem, prostřednictvím kterého budou zasílány podrobné informace o průběhu trasování. Pokud tento parametr není zadán, sp_start_mytrace zobrazí informace pouze na obrazovce. Pokud je zadána, ale adresa je zadána nesprávně, uložená procedura vygeneruje chybovou zprávu a ukončí se. Poslední parametr @filename je určen k určení názvu souboru, do kterého budou odeslány informace shromážděné během trasování. V případě, že tento parametr není definován, budou výchozí informace umístěny do souboru c:\mytraceN.trc, kde N je číslo deskriptoru fronty. Tato konvence, která definuje pravidlo pro pojmenovávání datových souborů trasování, umožňuje pořízení více tras současně, aniž by jednomu z nich bylo umožněno uzamknout soubor a zaznamenávat výsledky pouze pro sebe.

Chcete-li otestovat operaci spouštění, změňte vlastnosti souboru:

ALTER DATABASE testdb MODIFY FILE (NAME = `testdb_dat`, MAXSIZE = 30 MB)

Obdržíte zprávu, že vlastnosti souboru byly změněny:

Vlastnosti souboru změněny:
Příkaz: ALTER DATABASE testdb MODIFY FILE (NAME = `testdb_dat`,
MAXIMÁLNÍ VELIKOST = 30 MB)
Uživatelské jméno NT: Gandalf
Název aplikace: MS SQL Query Analyzer
Uživatelské jméno SQL: NA
Čas: 22. 11. 2000 14:15:28

Vždy je velmi obtížné zjistit, jaké události vedly k vytvoření patové situace. SQL Profiler však poskytuje speciální události, které mohou „vyšetřování“ mnohem usnadnit. Můžete například sledovat výskyt události Lock:Deadlock. Výskyt této události hovoří

že nastala patová situace. To uživateli sdělí ID procesu serveru (SPID), ID blokované transakce, čas, kdy k zablokování došlo, název aplikace a ID uživatele. Událost Lock: Deadlock Chain, která se generuje pokaždé, když dojde k bloku, je mimořádně pohodlná: umožňuje vám zjistit identifikátory procesů (SPID) a transakce.

Můžete zaznamenat ID transakcí zapojených do uváznutí, poté seskupit výsledky trasování podle ID transakcí a analyzovat pouze tyto transakce. Jiný přístup odesílá výsledky trasování do tabulky. Poté můžete pomocí dotazů filtrovat podle čísla SPID nebo ID transakce.

Chcete-li vygenerovat zablokování, vytvořte dvě tabulky, t1 a t2, z nichž každá musí mít pouze jeden celočíselný sloupec. Do každé tabulky zadejte jeden řádek obsahující hodnotu 1. Definujte trasování, které bude zaznamenávat následující sadu událostí: Lock:Deadlock, Lock: Deadlock Chain a odpovídající události začátku a konce provádění operátora (RPC, SP, SQL). Volba by měla být provedena v závislosti na zamýšleném zdroji blokování. V našem příkladu budeme potřebovat pouze události SQL: StmtStarting a SQL:StmtCompleted.

Kromě výchozích datových sloupců přidejte sloupec pro zachycení ID transakce a sloupců dle vašeho výběru. Nastavte filtr trasování tak, aby odpovídal ID databáze, se kterou pracujete. Poté otevřete dvě připojení k serveru z Query Analyzer. Při prvním připojení proveďte:

ZAHÁJIT AKTUALIZACI TRANSAKCE t1 SET col1 = 1

Na připojení 2 spusťte následující transakci:

ZAČNĚTE TRANSAKCI
UPDATE t2 SET col1 = 1
VYBERTE * Z t1
ZAKÁZAT TRANSAKCI

Nakonec ve spojení 1 proveďte příkazy:

VYBERTE * Z t2
ZAKÁZAT TRANSAKCI

Zastavte trasování a otevřete soubor trasování. Hledejte události Lock:Deadlock Chain a poznamenejte si čísla transakcí. Seskupte výstup podle ID transakcí a rozbalte odpovídající transakce. Výstup bude vypadat podobně jako na obrazovce 1.

SQL Server Enterprise Manager obsahuje průvodce, který vám může pomoci nastavit trasování, včetně těch, které lze použít k nalezení příčin zablokování. Chcete-li k definování trasování použít Průvodce vytvořením trasování, přihlaste se do Enterprise Manager, z nabídky Nástroje vyberte možnost Wizards, poté otevřete kategorii Management a vyberte možnost Průvodce vytvořením trasování.

Závěrečná poznámka

Možnosti přehrávání trasování SQL Profiler ve spojení s rozšířenými uloženými procedurami trasování SQL Server 7.0 vám umožňují ladit vaše databáze. Ať už pouze sledujete stav prostředí vašeho SQL Serveru nebo řešíte problémy s výkonem aplikací, je čas převést své znalosti do praxe.

Itzik Ben-Gan [e-mail chráněný] je držitelem certifikací MCDBA, MCSE+I, MCSD, MCT a SQL Server MVP. Je hlavním lektorem kurzů SQL Server na Hi-Tech College v Izraeli a předsedou izraelské skupiny uživatelů SQL Server.

Softwarový produkt SQL Server Profiler je grafické prostředí určené pro vytváření trasování a analýzu výsledků trasování. Události se ukládají do trasovacího souboru, který lze následně analyzovat nebo použít k přehrání konkrétních sekvencí kroků k identifikaci problémů, ke kterým došlo.

Pro sledování aktivit prováděných v tento moment, musíte spustit MS SQL Profiler, vytvořit nové trasování a nakonfigurovat analýzu indikátorů:

Na kartě Obecné musíte zadat název trasování. Určete, kam budou uložena zaznamenaná trasovací data - do souboru a/nebo do databázové tabulky.

Velmi zajímavá je záložka „Výběr události“:

Tato stránka specifikuje události, které je třeba monitorovat. V tomto příkladu uvedeme data nezbytná ke sledování plánů dotazů.

Získejte 267 videolekcí na 1C zdarma:

Ve výchozím nastavení probíhá trasování napříč všemi určenými událostmi ve všech databázích. Chcete-li použít výběr na přijatá data, musíte kliknout na tlačítko „Filtry sloupců...“:

Nastavme například výběr podle identifikátoru informační základna(ID databáze zjistíte pomocí dotazu SELECT DB_ID(N’DatabaseName’)).

Spuštění trasování v Profileru pro 1C

Po provedení všech nastavení zbývá pouze spustit sledování a klikněte na „Spustit“. Od tohoto okamžiku budou všechny akce uvedené ve filtru zahrnuty do trasování:

Například spouštím trasování po dobu trvání dokumentu „Příjmy zboží a služeb“, abych mohl sledovat nejnáročnější operace.

Jakmile je stopa přijata, je třeba ji analyzovat.

Analýza dat z Profileru

Pro analýzu lze výslednou stopu uložit buď do souboru nebo do tabulky. Uložíme do databázové tabulky:

Při vývoji aplikačních modulů systému Lexema.ru se pravidelně objevuje potřeba analyzovat dotazy do databáze během provozu obrazovkových formulářů, dotazů, sestav, uložených procedur a dalších objektů za účelem diagnostiky problémů. Nástroje pro profilování dotazů SQL jsou navrženy k řešení takových problémů. Umožňují:

  • sledovat události odlišné typy na databázovém serveru (provádění dotazů, uložených procedur atd.)
  • filtrovat události podle různých kritérií (název databáze, přihlášení uživatele atd.)
  • zaznamenejte sled akcí ve formě stopy události. Následně lze trasování analyzovat a také uložit do souboru nebo databáze.
  • analyzovat výkon (rychlost provádění) dotazů za účelem nalezení a odstranění systémových úzkých míst
  • a tak dále.

Tento článek pojednává o dvou nástrojích:

  • Lexema SQL Profiler zabudovaný do aplikačního modeláře
  • MS SQL Server Profiler, který je součástí MS SQL Server

Lexema SQL Profiler

Tento nástroj je určen k analýze požadavků na databázový server iniciovaných modelářem - programem pro vývoj konfigurací aplikací. S jeho pomocí můžete prozkoumat strukturu databáze aplikované logiky a jejích objektů.

Chcete-li použít Lexema SQL Profiler, spusťte aplikační modelář. Klikněte na tlačítko s obrázkem sudu v levém horním rohu okna:

Chcete-li zahájit záznam trasování SQL dotazů modeláře na databázový server, klikněte na tlačítko "Spustit" na panelu nástrojů.

Proveďte v modeláři akce, které vyžadují prověření databázových dotazů. Například po otevření seznamu modelů se vytvoří trasování z několika dotazů:

Tabulka nahoře obsahuje seznam událostí (SQL dotazů), pole dole obsahuje obsah (SQL kód)

Pole tabulky:

  • EventClass
  • TextData
  • Doba trvání
  • Doba spuštění
  • Čas ukončení
  • Název aplikace
  • Čte
  • Píše
  • Transakce

Například ze stopy událostí při otevírání seznamu modelů lze vyvodit následující závěry: data jsou požadována ze tří tabulek (L8_Model, L8_ModelProperty a L8_Namespace); nejdelší dotaz je proveden na tabulku L8_ModelProperty (242 ms).

MS SQL Server Profiler

MS SQL Server Profiler je nástroj obsažený v balíčku MS SQL Server, který umožňuje zachytit události databázového serveru. Události lze uložit do trasovacího souboru nebo databáze pro další analýzu nebo použít k opakování konkrétní série kroků k reprodukci problému a jeho diagnostice. Typické scénáře pro použití SQL Server Profiler:

  • Sledování výkonu instance SQL Server Database Engine
  • Ladění příkazů Transact-SQL a uložených procedur
  • analýzu výkonu identifikací pomalu běžících dotazů
  • Proveďte zátěžové testování a kontrolu kvality přehráním stop
  • přehrát stopu jednoho nebo více uživatelů
  • kontrola příkazů Transact-SQL a uložených procedur během vývoje projektu krok za krokem, aby bylo zajištěno správné provedení kódu
  • řešení problémů v SQL Server zachycením událostí v produkčním systému (produkční verze) a jejich reprodukcí v ladicí verzi (testovací verze). Toto je velmi užitečná příležitost, protože vám umožňuje pokračovat v používání produkčního systému při testování nebo ladění.
  • Auditování a sledování aktivit probíhajících v instanci serveru SQL Server. Tato funkce umožňuje správci zabezpečení zobrazit jakékoli události auditu, například úspěšné a neúspěšné pokusy přihlašovací a přístupová oprávnění k pokynům a objektům
  • ukládání výsledků trasování ve formátu XML, který poskytuje standardizovanou hierarchickou strukturu pro ukládání výsledků trasování. To vám umožní provádět změny existujících tras nebo je vytvářet ručně pro pozdější přehrávání
  • statistická analýza výsledků stop, umožňující seskupování a analýzu podobných tříd událostí. Výsledky obsahují počty založené na seskupení podle jednoho sloupce
  • Povolit uživatelům, kteří nejsou správci, vytvářet trasování
  • nastavení šablon trasování, které pak lze použít pro následující trasování

Spuštění a připojení k serveru

MS SQL Server Profiler můžete spustit z nabídky OS Windows (nabídka Start) nebo z nabídky programu MS SQL Server Management Studio (Nástroje - "Aplikace SQL Server Profiler"). Po spuštění se musíte přihlásit na server - zadejte adresu serveru, jméno účet a heslo:

Konfigurace možností trasování

Poté před zahájením trasování musíte nastavit jeho vlastnosti:

  • Název trasování - je vhodné jej nastavit, pokud ho plánujete uložit
  • Použít šablonu – Definuje výchozí konfiguraci trasování. Konkrétně zahrnuje třídy událostí, které chcete sledovat v SQL Server Profiler. Můžete například vytvořit šablonu, která určuje události, datové sloupce a filtry, které se mají použít. Šablony se nespouštějí, ale ukládají se do souborů s příponou .tdf na této šabloně běží.
  • Uložit do souboru pro opětovné otevření a analýzu
  • Uložit do tabulky - v tomto případě bude trasování uloženo do databáze a může být analyzováno pomocí SQL
  • Povolit čas zastavení trasování – nutné v případě dlouhodobých pozorování

Výběr typů událostí a jejich atributů

Důležitým krokem v nastavení trasování je výběr událostí (musíte přejít na příslušnou kartu). Karta Výběr událostí obsahuje mřížku, tabulku, která obsahuje všechny třídy událostí dostupné pro trasování. V tabulce je jeden řádek pro každou třídu událostí. Třídy událostí se mohou mírně lišit v závislosti na typu a verzi serveru, ke kterému jsou připojeny. Třídy událostí jsou uvedeny ve sloupci Události v mřížce a seskupeny podle kategorie událostí. Ve zbývajících sloupcích jsou uvedeny sloupce dat, které lze vrátit pro každou třídu událostí. Chcete-li do trasování zahrnout události, zaškrtněte políčko ve sloupci Události.

Výchozí tento seznam obsahuje pouze některé kategorie a typy akcí podle zvolené šablony (viz výše). Také se nezobrazují všechny sloupce. Více podrobné nastavení Doporučuje se zaškrtnout políčka „Zobrazit všechny události“ a „Zobrazit všechny sloupce“.

Pokud se provádí trasování pro sledování požadavků aplikace Lexema.ru, bude stačit označit 3 typy událostí ve 2 skupinách:

  • Uložené procedury
    • RPC:Completed – nastane, když je dokončeno vzdálené volání procedury (RPC).
    • SP:Completed – dojde po dokončení uložené procedury
  • TSQL - sledování provádění příkazů TransactSQL odeslaných klienty na databázový server
    • SQL:BatchCompleted – nastane, když příkaz TransactSQL dokončí provádění

Poznámka: zaškrtávací políčko ve sloupci Události může být ve třech stavech:

  • není zaškrtnuto - událost není sledována
  • černé zaškrtnutí - jsou vybrány všechny datové sloupce - pro vybranou událost budou shromážděna všechna možná data pro ni
  • šedé zaškrtnutí - jsou vybrány pouze některé datové sloupce - pro vybranou událost budou shromažďována pouze některá data podle zaškrtnutí ve sloupcích

Ve výchozím nastavení nejsou u některých událostí vybrány všechny sloupce (je zde šedé zaškrtnutí). Chcete-li vybrat všechny sloupce, musíte zrušit zaškrtnutí políčka a znovu jej zaškrtnout. Tím zaškrtnete políčka u všech viditelných datových sloupců.

Mezi další užitečné kategorie a typy událostí patří:

  • Bezpečnostní audit

Nastavení možností filtrování

Filtry omezují akumulaci událostí ve stopě. Pokud není filtr nastaven, všechny události vybraných tříd událostí se vrátí do výstupu trasování. Instalace trasovacího filtru je volitelná, ale tento filtr minimalizuje režijní náklady na trasování. Filtry pro definice trasování se přidávají na kartu Výběr události v dialogovém okně Vlastnosti trasování nebo Vlastnosti šablony trasování.

Při sledování událostí, ke kterým dochází, když konkrétní uživatel používá webové rozhraní Lexema.ru, je vhodné nastavit filtr „ApplicationName“ podobně jako<логин_пользователя>+&1, například "PetrovAN&1", ​​​​kde PetrovAN je přihlašovací jméno uživatele:

S tímto nastavením filtru budou do trasování zahrnuty pouze události generované akcemi zadaného uživatele.

Sledování událostí

Předpokládejme, že po nastavení výše popsaných nastavení a zahájení trasování se uživatel s přihlášením " airat" přihlásí se do systému a otevře evidenci kategorií příjmů a výdajů modulu "Domácí účetnictví" a následně otevře jeden z dokladů (jako příklad):

V důsledku toho trasování SQL Server Profiler zobrazí seznam událostí:

Při analýze seznamu událostí trasování můžete vidět, že jeden z nejdelších dotazů byl následující:

exec sp_executesql N "VYBRAT JAKO, JAK, JAKO, JAKO, JAKO, JAKO, JAKO, JAKO, JAKO, JAK, JAKO, JAKO, JAKO, JAKO, JAKO, AS, AS OD", N "@PrimaryKeyBoundary bigint,@TopCount bigint", @PrimaryKeyBoundary = NULL , @TopCount = NULL

Soudě podle názvu objektu (VTransactionCategory) se jedná o požadavek na výběr seznamu kategorií transakcí. Typ této události je RPC:Completed (dokončení provádění vzdálené procedury).

Události typu SQL:BatchCompleted můžete také vidět v seznamu:

Toto je výsledek provedení požadavku (QuerySource) Lexema.ru.

Chcete-li v textu vyhledat dotazy sledované v trasování, musíte kliknout na tlačítko "Najít čáru" (s ikonou dalekohledu) na panelu nástrojů nebo stisknout kombinaci kláves Ctrl+F:

Poté musíte zadat hledaný text a vybrat sloupec, který chcete hledat (text dotazu je obsažen ve sloupci TextData). Po kliknutí na tlačítko "Další" bude kurzor umístěn na řádku události obsahující hledaný text.

Pro účely testování a ladění lze tyto dotazy ručně znovu spustit. Chcete-li to provést, musíte zkopírovat jejich text, otevřít SQL Server Management Studio, připojit se k příslušnému serveru, vybrat databázi, vytvořit dotaz, vložit jeho text a spustit.

Kromě použití nástroje Query Analyzer k nalezení neúčinných příkazů T-SQL můžete také použít tento nástroj SQL Server Profiler. Profiler umožňuje monitorovat všechny příkazy T-SQL, které jsou v systému prováděny grafický displej informace o těchto operátorech. Profiler také poskytuje funkce třídění a filtrování, které můžete použít k identifikaci příkazů T-SQL, které využívají nejvíce prostředků CPU a I/O. Pomocí těchto informací můžete určit, na které příkazy T-SQL se zaměřit při ladění. Příkazy T-SQL, které jsou volány z aplikace, lze zobrazit v Profileru; nepotřebujete však přístup ke zdrojovému kódu samotné aplikace.

Nástroj Profiler v SQL Server 2000 funguje podobně jako nástroj Profiler v SQL Server 7, ale obsahuje některá vylepšení. Jedním z užitečných doplňků je šablona trasování, kterou lze použít k vytváření souborů trasování. (Trasování musí být stále vytvořeno, než jej budete moci použít ke sledování operací SQL Server.) Na serveru SQL Server bylo nutné vytvořit trasování ručně.

Chcete-li spustit nástroj Profiler a zahájit trasování, postupujte takto.

  1. Klepněte na tlačítko Start, vyberte Programy, vyberte Microsoft SQL Server a poté vyberte Profiler. Když zpočátku otevřete okno Profiler, bude prázdné. V SQL Serveru se neotevřou žádné panely a neprovede se žádné profilování.
  2. Chcete-li začít s vytvářením profilování, musíte vybrat existující šablonu trasování, kterou chcete spustit nebo vytvořit nová šablona stopy k provedení. (Proces spouštění je popsán v kroku 4.) SQL Server 2000 Profiler poskytuje řadu šablon trasování, ze kterých si můžete vybrat. Použití těchto šablon trasování vám může ušetřit spoustu času, protože trasování nemusíte vytvářet od začátku. Chcete-li zobrazit seznam šablon trasování, klikněte na nabídku Soubor, ukažte na Otevřít a vyberte Šablony trasování. Zobrazí se dialogové okno Otevřít (obrázek 35.16).


    Rýže. 35.16.

    Následující šablony trasování jsou k dispozici se serverem SQL Server.
    • SQLServerProfilerSP_Counts.tdf. Počítá počet spuštěných uložených procedur. Výsledky jsou seskupeny podle názvu uložené procedury a obsahují počet spuštění odpovídající procedury.
    • SQLServerProfilerStandard.tdf. Sbírá obecná informace o spojení, provedené uložené procedury a SQL balíčky v pořadí, v jakém jsou spouštěny.
    • SQLServerProfilerTSQL.tdf. Shromažďuje informace o všech příkazech T-SQL v pořadí, v jakém jsou přijímány na SQL Server od uživatelů. Toto trasování jednoduše obsahuje příkazy T-SQL a časy, kdy byly provedeny.
    • SQLServerProfilerTSQL_Duration.tdf. Uvádí seznam příkazů T-SQL, které byly spuštěny, a také dobu (v milisekundách), kterou trvalo provedení těchto příkazů.
    • SQLServerProfilerTSQL_Grouped.tdf. Shromažďuje data podobná těm, která shromažďuje SQLServerProfilerTSQL, ale seskupuje příkazy uživatele, který příkazy spustil.
    • SQLServerProfilerTSQL_Replay.tdf. Poskytuje detailní informace o spouštění příkazů T-SQL. Toto trasování obsahuje data, která lze použít k reprodukci příkazů T-SQL v Query Analyzer.
    • SQLServerProfilerTSQL_SPs.tdf . Vytiskne zadané uložené procedury a také T-SQL příkazy v rámci těchto postupů. Výsledky se zobrazí v pořadí provedení.
    • SQLServerProfilerTuning.tdf. Shromažďuje data o provedení uložené procedury a balíku SQL.
    Tyto šablony trasování mohou být velmi užitečné. Například vzor trasování SQLServerProfilerTSQL_Duration vám může pomoci identifikovat příkazy T-SQL, jejichž provedení trvá nejdéle. Tyto informace mohou sloužit jako výchozí bod optimalizace dotazů. Operátorovi to může trvat dlouho, protože dělá hodně práce nebo možná proto, že není efektivní. Jak uvidíte v dalším kroku, pro jakékoli trasování musíte použít předdefinovanou šablonu.
  3. Chcete-li spustit trasování, klikněte na Soubor, vyberte Nový a poté vyberte Trasování. Zobrazí se dialogové okno Connect to SQL Server (Obrázek 35.17). V tomto dialogovém okně vyberte systém SQL Server, který chcete trasovat, a klepněte na tlačítko OK.


    Rýže. 35.17.
  4. Zobrazí se okno Trace Properties (Obrázek 35.18). Na kartě Obecné můžete zadat název trasování (pole Název trasování) a vybrat šablonu trasování, kterou chcete použít jako výchozí bod. Pro tento příklad vyberte šablonu SQLServerProfilerTSQLDuration. V dolní části záložky můžete určit, kam chcete uložit trasování - do souboru (Uložit do souboru) a/nebo do tabulky SQL Serveru (Uložit do tabulky). Pokud není zaškrtnuto žádné z těchto políček, výsledky trasování se zobrazí pouze na obrazovce. Kromě toho můžete nastavit čas ukončení trasování (zaškrtávací políčko a pole Povolit čas zastavení trasování). To může být velmi užitečné pro dlouhodobé stopy.


    Rýže. 35.18.
  5. Dále klikněte na záložku Události (obrázek 35.19).


    Rýže. 35,19. Na této kartě můžete vybrat jednu nebo více událostí, které budou v tomto trasování sledovány. Můžete sledovat řadu tříd událostí (kategorií) a konkrétních událostí. Seznam Dostupné třídy událostí obsahuje třídy událostí, jako jsou kurzory, chyby a varování, zámky, objekty, skenování, SQL operátory, uložené procedury, transakce a TSQL.
  6. Po výběru událostí, které chcete trasovat, klikněte na kartu Sloupce dat (obrázek 35.20). Na této kartě určete, jaká data budou během tohoto trasování shromažďována. Tato data mohou zahrnovat čas ukončení,

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é nastanou 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. Pro zobrazení úplný seznam vlastnosti a události, povolte příznaky „Zobrazit všechny sloupce“ a „Zobrazit všechny události“.

Popis akcí:

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 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 požadavky na databázi „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é trasovací okno 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ůjdeme 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++.

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, 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řijdou š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.

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.