C# 如何获取给定数据库中的 XEvent 会话列表

C# how to get list of XEvent Sessions in a given database

我正在尝试用 C# 编写一些简单的扩展事件管理代码,但我对它还很陌生。我能够在 SSMS 中设置 XEvent sessions,并且能够使用 this example

从在 C# 中创建的 session 获取 Linq 流

我现在想做的是能够查询给定的数据库以了解 session 存在的内容。我可以手动查询 sys.dm_xe* table 并为它们创建映射的 类,但看起来 类 已经存在于 Microsoft.SqlServer.Management.XEvent 命名空间中 - 所以如果已经存在,我不想做一个糟糕的 re-implementation。

持有session存在的具体table是sys.dm_xe_sessions

感谢任何示例代码或帮助。谢谢!

要查找的 class 是 Microsoft.SqlServer.Managment.XEvent 中的 XEStore。有了它,您可以查看存在哪些扩展事件会话以及创建新的事件会话。

using (SqlConnection conn = new SqlConnection(connString)) {
    XEStore store = new XEStore(new SqlStoreConnection(conn));

    if (store.Sessions[sessionName] != null) {
        Console.WriteLine("dropping existing session");
        store.Sessions[sessionName].Drop();
    }

    Session s = store.CreateSession(sessionName);
    s.MaxMemory = 4096;
    s.MaxDispatchLatency = 30;
    s.EventRetentionMode = Session.EventRetentionModeEnum.AllowMultipleEventLoss;

    Event rpc = s.AddEvent("rpc_completed");
    rpc.AddAction("username");
    rpc.AddAction("database_name");
    rpc.AddAction("sql_text");
    rpc.PredicateExpression = @"sqlserver.username NOT LIKE '%testuser'";

    s.Create();
    s.Start();

    //s.Stop();
    //s.Drop();
}