我有记录和读取扩展事件的要求,我确实通过Xpath查询实现了这一点,并且按预期工作。一段时间过去了,现在.xel文件的大小增加了,Xpath查询需要很长时间才能返回结果。我听说有.net代码可以帮助以更高的效率读取.xel文件。请帮我同样的源代码。
答案 0 :(得分:0)
可以使用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}"
);
}
}
}
}
}
}
我发现即使使用较大的跟踪文件,此方法也相当快。您可能考虑使用过渡文件来限制跟踪文件的大小。 Example here。