T-SQL, как получить больше чем последний запрос, выполненный SPID из кэша (DBCC INPUTBUFFER, sys.sysprocesses)

У меня есть этот сценарий:

SPID = 100 (A SSMS tab for example)


SELECT TOP 1 * FROM SOME_TABLE
GO
SELECT TOP 1 * FROM SOME_TABLE2
GO
SELECT TOP 1 * FROM SOME_TABLE3

Когда я запускаю (DBCC INPUTBUFFER, sys.sysprocesses), я получаю только последний выполненный запрос:

  SELECT TOP 1 * FROM SOME_TABLE3.

Мне нужно получить все запросы из этого сеанса (в данном случае spid 100), а не только последний. Есть ли способ сделать это?

Я ищу способ сделать это с помощью TSQL, получить трассировку SQL Server Profiler не вариант.

Спасибо!

1 ответ

Вам нужно захватить запросы, используя расширенные события или профилировщик. Будет лучше использовать XE. Создайте сеанс как этот:

CREATE EVENT SESSION [Capture_Queries]
ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
  ACTION 
  (
          sqlserver.sql_text
  )
  WHERE 
  (
          session_id = 100
  )
)
ADD TARGET package0.event_file
(
    SET filename = 'D:\CaptureQueries.xel',
        max_file_size = 5,
        max_rollover_files = 1
)

После этого вы можете запустить и остановить его с помощью этих команд:

ALTER EVENT SESSION [Capture_Queries] ON SERVER STATE = START
ALTER EVENT SESSION [Capture_Queries] ON SERVER STATE = STOP

Начните сеанс, выполните запросы и затем остановите его. Вы можете увидеть захваченные запросы в SSMS, используя Management \ Extended Events \ Sessions \ Capture_Queries узел в обозревателе объектов - под сеансом есть узел package0.event_file. Дважды щелкните по нему, чтобы увидеть собранные данные.

Другие вопросы по тегам