Riješeno: posljednji izvršeni upit servera

Posljednje ažuriranje: 09/13/2023

Kada se radi o bazama podataka, manipulaciji podacima i razvoju aplikacija, između ostalog, često je potrebno pratiti posljednji izvršeni upit. Temeljno razumijevanje ove teme ne pomaže samo programerima u otklanjanju grešaka, već i u poboljšanju ukupnih performansi njihovih aplikacija. U ovom članku ćemo pogledati kako možete dohvatiti posljednji izvršeni upit u SQL Serveru koristeći Transact-SQL.

Razumijevanje SQL Server Profilera

SQL Server Profiler je moćan alat koji snima SQL Server događaje sa servera. Nadzire bazu podataka i instance SQL Servera za aktivnosti i operacije koje se izvršavaju. Jedan takav primjer ove operacije je praćenje posljednjeg izvršenog upita. Da bi uhvatio ove podatke, SQL Server Profiler koristi SQL Trace, koji također koriste druge aplikacije poput Čarobnjak za podešavanje indeksa.

-- 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' ) )

Ekstrahiranje posljednjeg izvršenog upita

Za izdvajanje posljednji izvršeni upit, prvo trebamo pristupiti prikazu dinamičkog upravljanja: sys.dm_exec_requests. Ovaj prikaz sadrži informacije o svakom zahtjevu koji se izvodi u SQL Serveru. Možemo koristiti naredbu 'SQL Trace' da filtriramo i dobijemo specifični ID zahtjeva posljednjeg izvršenog upita.

-- 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) 
)

Razumijevanje dinamičkog upravljanja pogledom (DMV)

The Dinamički prikaz upravljanja (DMV) daje informacije o stanju servera koje možete koristiti za nadgledanje zdravlja instance servera, dijagnosticiranje problema i podešavanje performansi.

U gornjem upitu koristili smo DMV: sys.dm_exec_sql_text koji vraća tekst SQL grupe koja se izvršava. Važno je shvatiti da ovaj pogled pruža samo informacije o trenutnom SQL naredbi na serveru, stoga se često koristi u sprezi sa sys.dm_exec_requests da vratite određene informacije.

Objašnjenje koda korak po korak

Hajde da raščlanimo upit korišten iznad:

  1. Koristimo DMV sys.dm_exec_requests da dobijete ID zahtjeva za sve upite koji se izvršavaju.
  2. Ove zahtjeve poredamo prema vremenu početka u opadajućem redoslijedu i biramo prvi. Ovo nam daje posljednji izvršeni upit.
  3. SELECT TOP 1 request_id 
    FROM sys.dm_exec_requests 
    ORDER BY start_time DESC
    
  4. Ovaj ID zahtjeva prosljeđujemo drugom DMV-u sys.dm_exec_sql_text koji vraća tekst SQL grupe koji odgovara ovom ID-u.
  5. SELECT text
    FROM sys.dm_exec_sql_text(<request_id>)
    

Važno je napomenuti da korisnik mora imati dozvolu VIEW SERVER STATE za upite ovih podataka. Ovo se može odobriti korištenjem:

GRANT VIEW SERVER STATE TO <user_name>;
Slični postovi: