T-SQL如何从缓存中获取比SPID执行的最后一次查询更多的查询(DBCC INPUTBUFFER,sys.sysprocesses)

时间:2018-12-13 14:27:50

标签: sql-server tsql dbcc spid

我有这种情况:

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 个答案:

答案 0 :(得分:1)

您需要使用Extended EventsProfiler捕获查询。使用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

启动会话,执行查询,然后停止它。您可以使用对象资源管理器中的Management \ Extended Events \ Sessions \ Capture_Queries节点在SSMS中查看捕获的查询-会话下有一个package0.event_file节点。双击以查看收集的数据。