从扩展事件会话收集参数值

Pet*_*ell 10 extended-events sql-server-2012

我正在使用扩展事件来跟踪我们的应用程序使用的语句。我创建了一个会话来收集我想要的信息,除了我还想知道所使用参数实际值

我在非生产环境中执行此跟踪,跟踪影响的任何性能都是可以接受的。

所有查询都源自 Hibernate,并以以下形式参数化:

SELECT a, b, c From Customer where CustomerId = @P0
Run Code Online (Sandbox Code Playgroud)

这是我的会话设置。

CREATE EVENT SESSION [TracingForStatements] ON SERVER 
ADD EVENT sqlserver.sp_statement_completed ( 
    ACTION (    
        sqlserver.session_id,
        package0.collect_system_time,
        sqlserver.transaction_id,
        package0.event_sequence
    ) 
    WHERE ( 
        sqlserver.database_id=555
    ) 
) 
ADD TARGET package0.ring_buffer(SET max_memory= 128000)
WITH (EVENT_RETENTION_MODE = NO_EVENT_LOSS, 
      MAX_DISPATCH_LATENCY = 1 SECONDS)
Run Code Online (Sandbox Code Playgroud)

如何捕获捕获语句中使用的参数的实际值?是否可以?

--编辑(解决方法):将事件更改为 rpc_completed 为我提供了从 Hibernate 调用的完整 sql 命令(包括所有参数值)。对于其他情况,如果可能,知道如何捕获参数值仍然很好。

小智 5

有人提到“我认为只有 sqlserver.rpc_completed 事件会给你完整的 SQL 命令,包括参数值。” 请查看下面的答案:

捕获 Sql Server 扩展会话中传递的参数值