Расширенные события могут быть прочитаны программно с помощью QuerableXEventData из любого приложения .NET, включая PowerShell.
Ниже приведен пример консоли C #, которая извлекает данные XE из трассировки, включающей событие rpc_completed
. Перегрузка конструктора здесь указывает шаблон файла для обработки файлов 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}"
);
}
}
}
}
}
}
Я нашел этот метод достаточно быстрым, даже с большими файлами трассировки. Вы можете рассмотреть возможность использования файлов ролловера для ограничения размера файла трассировки. Пример здесь .