【问题标题】:How to pass SQL Server Extended Events Activity Id from C#?如何从 C# 传递 SQL Server 扩展事件活动 ID?
【发布时间】:2011-11-25 07:37:59
【问题描述】:

我一直在研究在完整的端到端跟踪场景中使用扩展事件。我对 XEvent 的活动 ID 特别感兴趣,它有助于跟踪给定活动的事件执行顺序。

您已经猜到了,我在 SQL Server 2008 中的事件会话设置了以下选项:

TRACK_CAUSALITY = 开启

我的问题是,当从 C# 代码(Linq、Entity Framework 等)执行 SQL 查询时,是否可以推断出将由 SQL Server 中的扩展事件跟踪的活动 ID?

例如,我希望能够将执行线程的 CorrelationManager.ActivityId guid 传播到 SQL Server 以进行 XEvent 跟踪。

非常感谢

【问题讨论】:

    标签: sql-server-2008 entity-framework extended-events


    【解决方案1】:

    扩展事件当前不跟踪 SQL Server 之外的任何内容的 activity_id。 TRACK_CAUSALITY 仅用于跟踪 SQL Server 中的哪个事件导致 SQL Server 中的另一个事件,例如 sql_statement_starting 事件将具有特定的 activity_id 和 seq 编号 1,然后后续 file_read 事件将具有相同的 activity_id 和 seq 2,a PAGEIOLATCH_SH 的 wait_info 事件将具有相同的 activity_id 和 seq 为 3,依此类推,直到您到达 sql_statement_completed 并带有 activity_id 的最终 seq 编号。您可以在我关于扩展事件的博文中找到大量示例:

    http://sqlskills.com/blogs/jonathan/category/Extended-Events.aspx

    如果您将数据转储到 ETW 目标,您可以将其与应用程序的 ETW 跟踪合并,并根据发生率绘制事件的松散相关性,但两者之间可能存在因果关系跟踪。

    【讨论】:

    • 再次感谢乔纳森,您的回答非常有帮助,也非常清楚。
    • 是的,抱歉我没有更好的答案,但目前不存在。人们希望引擎团队将 XEvents 的 ETW 提供程序从经典更改为基于清单的提供程序,以便它可以更好地与 Windows 中的 ETW 集成,这可能允许您完成这一级别的工作。
    • 只是对此的更新,在 SQL Server 2012 中,您可以从应用程序传递 SQL Native Client 的 ID 以进行端到端跟踪。这记录在以下 BOL 主题中:msdn.microsoft.com/en-us/library/hh213095.aspx
    • 哇,这是一个非常有趣的补充,感谢乔纳森的更新
    猜你喜欢
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2015-07-04
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    相关资源
    最近更新 更多