0

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

4

1 回答 1

2

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

下面是一个 C# 控制台示例,它从包含rpc_completed事件的跟踪中提取 XE 数据。此处的构造函数重载指定要处理的 XE 文件的文件模式。Microsoft.SqlServer.XE.Core该项目包括对和的程序集引用Microsoft.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}"
                            );
                    }
                }
            }
        }
    }
}

我发现即使使用大型跟踪文件,这种方法也相当快。您可以考虑使用翻转文件来限制跟踪文件的大小。这里的例子

于 2018-11-12T12:55:02.430 回答