Как читать расширенные события через код .net - PullRequest
0 голосов
/ 12 ноября 2018

У меня было это требование для регистрации и чтения расширенных событий, я добился этого с помощью запросов Xpath, и это сработало, как и ожидалось. Прошло некоторое время, и теперь размер файла .xel увеличился, и запрос Xpath занимает много времени, чтобы вернуть результаты. Я слышал, что есть код .net, который поможет более эффективно читать файл .xel. Пожалуйста, помогите мне исходный код для того же.

1 Ответ

0 голосов
/ 12 ноября 2018

Расширенные события могут быть прочитаны программно с помощью 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}"
                            );
                    }
                }
            }
        }
    }
}

Я нашел этот метод достаточно быстрым, даже с большими файлами трассировки. Вы можете рассмотреть возможность использования файлов ролловера для ограничения размера файла трассировки. Пример здесь .

...