Vyřešeno: server naposledy provedl dotaz

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:

  1. Používáme DMV sys.dm_exec_requests získat ID požadavku všech prováděných dotazů.
  2. 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.
  3. SELECT TOP 1 request_id 
    FROM sys.dm_exec_requests 
    ORDER BY start_time DESC
    
  4. 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.
  5. 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>;
Související příspěvky:

Zanechat komentář