如何通过.net代码读取扩展事件

时间:2018-11-12 11:57:07

标签: .net sql-server xpath extended-events

我有记录和读取扩展事件的要求,我确实通过Xpath查询实现了这一点,并且按预期工作。一段时间过去了,现在.xel文件的大小增加了,Xpath查询需要很长时间才能返回结果。我听说有.net代码可以帮助以更高的效率读取.xel文件。请帮我同样的源代码。

1 个答案:

答案 0 :(得分:0)

可以使用QuerableXEventData从任何.NET应用程序(包括PowerShell)中以编程方式读取扩展事件数据。

下面是一个C#控制台示例,该示例从包含rpc_completed事件的跟踪中提取XE数据。构造函数重载在此指定要处理的XE文件的文件模式。该项目包括对Microsoft.SqlServer.XE.CoreMicrosoft.SqlServer.XEvent.Linq(位于系统上的C:\Program Files\Microsoft SQL Server\140\Shared\中)的程序集引用。

using System;
using Microsoft.SqlServer.XEvent.Linq;

namespace ExtendedEventsExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var xeFilePathPattern = @"C:\TraceFiles\rpc_completed*.xel";
            using (var events = new QueryableXEventData(xeFilePathPattern))
            {
                foreach (var xe in events)
                {
                    if (xe.Name == "rpc_completed")
                    {
                        var xeName = xe.Name;
                        var xeTimestamp = xe.Timestamp;
                        var xeStatementField = (String)xe.Fields["statement"].Value.ToString();
                        var xeDurationField = (UInt64)xe.Fields["duration"].Value;
                        var xeClientAppNameAction = (String)xe.Actions["client_app_name"].Value;
                        Console.WriteLine(
                            $"Name: {xeName}" +
                            $", Timestamp: {xeTimestamp}" +
                            $", Statement: {xeStatementField}" +
                            $", Duration: {xeDurationField}" +
                            $", ClientAppName: {xeClientAppNameAction}"
                            );
                    }
                }
            }
        }
    }
}

我发现即使使用较大的跟踪文件,此方法也相当快。您可能考虑使用过渡文件来限制跟踪文件的大小。 Example here