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:
- Koristimo DMV sys.dm_exec_requests da dobijete ID zahtjeva za sve upite koji se izvršavaju.
- Ove zahtjeve poredamo prema vremenu početka u opadajućem redoslijedu i biramo prvi. Ovo nam daje posljednji izvršeni upit.
- Ovaj ID zahtjeva prosljeđujemo drugom DMV-u sys.dm_exec_sql_text koji vraća tekst SQL grupe koji odgovara ovom ID-u.
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>)
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>;
