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