Při práci s databázemi, manipulací s daty a vývojem aplikací, mimo jiné, je často nutné vysledovat poslední provedený dotaz. Důkladné pochopení tohoto tématu pomáhá vývojářům nejen při ladění, ale také při zvyšování celkového výkonu jejich aplikací. V tomto článku se podíváme na to, jak můžete načíst poslední provedený dotaz na serveru SQL pomocí Transact-SQL.
Pochopení SQL Server Profiler
SQL Server Profiler je výkonný nástroj, který zaznamenává události serveru SQL Server ze serveru. Monitoruje databázi a instance SQL Server pro činnosti a operace, které jsou prováděny. Jedním takovým příkladem této operace je sledování posledního provedeného dotazu. K zachycení těchto dat využívá SQL Server Profiler nástroj SQL Trace, který využívají i jiné aplikace, např Průvodce laděním indexu.
-- Typical structure of a SQL Server Query capture SELECT text FROM sys.dm_exec_sql_text( ( SELECT MAX( request_id ) FROM sys.dm_exec_requests where command = 'SQL Trace' ) )
Extrahování posledního provedeného dotazu
Chcete-li extrahovat poslední provedený dotaz, nejprve potřebujeme získat přístup k zobrazení dynamické správy: sys.dm_exec_requests. Toto zobrazení obsahuje informace o každém požadavku spuštěném na serveru SQL Server. Můžeme použít příkaz 'SQL Trace' k odfiltrování a získání konkrétního ID požadavku posledního provedeného dotazu.
-- The SQL Query to get the last executed query SELECT text FROM sys.dm_exec_sql_text( ( SELECT TOP 1 request_id FROM sys.dm_exec_requests ORDER BY start_time DESC) )
Porozumění pohledu Dynamic Management View (DMV)
Jedno Dynamické zobrazení správy (DMV) poskytuje informace o stavu serveru, které můžete použít ke sledování stavu instance serveru, diagnostice problémů a ladění výkonu.
Ve výše uvedeném dotazu jsme použili DMV: sys.dm_exec_sql_text který vrátí text dávky SQL, která se provádí. Je důležité pochopit, že toto zobrazení poskytuje pouze informace o aktuálním příkazu SQL na serveru, proto se často používá ve spojení s sys.dm_exec_requests vrátit konkrétní informace.
Vysvětlení kodexu krok za krokem
Pojďme si výše použitý dotaz rozebrat:
- Používáme DMV sys.dm_exec_requests získat ID požadavku všech prováděných dotazů.
- Tyto požadavky seřadíme podle času jejich zahájení v sestupném pořadí a vybereme první. To nám dává poslední provedený dotaz.
- Toto ID požadavku předáme jinému DMV sys.dm_exec_sql_text který vrátí text dávky SQL, která odpovídá tomuto ID.
SELECT TOP 1 request_id FROM sys.dm_exec_requests ORDER BY start_time DESC
SELECT text FROM sys.dm_exec_sql_text(<request_id>)
Je důležité si uvědomit, že uživatel musí mít oprávnění VIEW SERVER STATE k dotazování na tato data. To lze udělit pomocí:
GRANT VIEW SERVER STATE TO <user_name>;