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. Дважды щелкните по нему, чтобы увидеть собранные данные.