
Когато се работи с бази данни, манипулиране на данни и разработка на приложения, наред с други неща, често е необходимо да се проследи последната изпълнена заявка. Задълбоченото разбиране на тази тема не само помага на разработчиците при отстраняването на грешки, но и при подобряването на цялостната производителност на техните приложения. В тази статия ще разгледаме как можете да извлечете последната изпълнена заявка в SQL Server с помощта на Transact-SQL.
Разбиране на SQL Server Profiler
SQL Server Profiler е мощен инструмент, който записва събития на SQL Server от сървър. Той следи базата данни и екземплярите на SQL Server за дейности и операции, които се изпълняват. Един такъв пример за тази операция е проследяването на последната изпълнена заявка. За да улови тези данни, SQL Server Profiler използва SQL Trace, който се използва и от други приложения като Съветник за настройка на индекса.
-- 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' ) )
Извличане на последната изпълнена заявка
За да извлечете последно изпълнено запитване, първо трябва да имаме достъп до динамичния изглед за управление: sys.dm_exec_requests. Този изглед съдържа информация за всяка заявка, която се изпълнява в SQL Server. Можем да използваме командата „SQL Trace“, за да филтрираме и да получим конкретния идентификатор на най-скорошната изпълнена заявка.
-- 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) )
Разбиране на изгледа за динамично управление (DMV)
- Динамичен изглед за управление (DMV) ви дава информация за състоянието на сървъра, която можете да използвате, за да наблюдавате изправността на екземпляр на сървъра, да диагностицирате проблеми и да настройвате производителността.
В заявката по-горе използвахме DMV: sys.dm_exec_sql_text който връща текста на SQL пакета, който се изпълнява. Важно е да разберете, че този изглед предоставя информация само за текущия SQL оператор на сървъра, поради което често се използва във връзка с sys.dm_exec_requests за връщане на конкретна информация.
Стъпка по стъпка Обяснение на кода
Нека разбием използваната по-горе заявка:
- Използваме DMV sys.dm_exec_requests за да получите идентификатора на заявката за всички изпълнявани заявки.
- Подреждаме тези заявки по началния им час в низходящ ред и избираме първата. Това ни дава последната изпълнена заявка.
- Предаваме този идентификатор на заявка на друг DMV sys.dm_exec_sql_text който връща текста на SQL пакета, който съответства на този идентификатор.
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>)
Важно е да се отбележи, че потребителят трябва да има разрешение за VIEW SERVER STATE, за да прави заявки за тези данни. Това може да бъде предоставено чрез:
GRANT VIEW SERVER STATE TO <user_name>;