Решено: последната изпълнена заявка на сървъра

Последна актуализация: 09/13/2023
Автор: SQL SourceTrail

Когато се работи с бази данни, манипулиране на данни и разработка на приложения, наред с други неща, често е необходимо да се проследи последната изпълнена заявка. Задълбоченото разбиране на тази тема не само помага на разработчиците при отстраняването на грешки, но и при подобряването на цялостната производителност на техните приложения. В тази статия ще разгледаме как можете да извлечете последната изпълнена заявка в 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 за връщане на конкретна информация.

Стъпка по стъпка Обяснение на кода

Нека разбием използваната по-горе заявка:

  1. Използваме DMV sys.dm_exec_requests за да получите идентификатора на заявката за всички изпълнявани заявки.
  2. Подреждаме тези заявки по началния им час в низходящ ред и избираме първата. Това ни дава последната изпълнена заявка.
  3. SELECT TOP 1 request_id 
    FROM sys.dm_exec_requests 
    ORDER BY start_time DESC
    
  4. Предаваме този идентификатор на заявка на друг DMV sys.dm_exec_sql_text който връща текста на SQL пакета, който съответства на този идентификатор.
  5. SELECT text
    FROM sys.dm_exec_sql_text(<request_id>)
    

Важно е да се отбележи, че потребителят трябва да има разрешение за VIEW SERVER STATE, за да прави заявки за тези данни. Това може да бъде предоставено чрез:

GRANT VIEW SERVER STATE TO <user_name>;
Подобни публикации:

Оставете коментар