有什么方法可以链接“开始”和“完成”事件吗?

Sim*_*wsi 1 sql-server extended-events

在 SQL Server 扩展事件中,是否有任何方法可以将“开始”事件(例如 )rpc_starting与“完成”事件(例如 )链接起来rpc_completed?例如,是否有类似相关 ID 的东西可以唯一标识对 SQL Server 的调用?

我想查询记录的事件,以获取通话的开始时间(来自 )rpc_starting及其持续时间(来自 )rpc_completed。到目前为止,我还没有找到任何方法来唯一链接同一调用的开始和结束。

我认为该request_id操作可能会起作用,但对于我查看过的事件,它似乎显示为 0。

Yan*_*ens 6

因果跟踪可以为您做到这一点,下面是一个示例:

CREATE EVENT SESSION TestCausality
ON SERVER
    ADD EVENT sqlserver.auto_stats,
    ADD EVENT sqlserver.sql_batch_completed,
    ADD EVENT sqlserver.sql_batch_starting,
    ADD EVENT sqlserver.sql_statement_completed,
    ADD EVENT sqlserver.sql_statement_recompile,
    ADD EVENT sqlserver.sql_statement_starting
    ADD TARGET package0.event_file
    (SET filename = N'TestCausality')
WITH
(
    TRACK_CAUSALITY = ON
);
Run Code Online (Sandbox Code Playgroud)

创建事件后,我运行一个简单的 TSQL 作为示例:

SELECT TOP 10 * FROM dbo.CommandLog
Run Code Online (Sandbox Code Playgroud)

然后,在扩展事件视图的 GUI 中,您可以添加“Attach_Activity_Id.GUID”,这样您就可以将您的语句相互链接。看起来像这样:SQL Server 因果关系