1

我正在尝试用 C# 编写一些简单的扩展事件管理代码,但对它来说还很陌生。我能够在 SSMS 中设置 XEvent 会话,并且能够使用此示例从 C# 中创建的会话中获取 Linq 流

我现在想做的是能够查询给定数据库中存在哪些会话。我可以手动查询sys.dm_xe*表并为这些表创建映射类,但看起来这些类已经存在于Microsoft.SqlServer.Management.XEvent命名空间中——所以如果某些东西已经存在,我不想做一个糟糕的重新实现。

保存哪些会话存在的特定表是sys.dm_xe_sessions.

任何示例代码或帮助表示赞赏。谢谢!

4

1 回答 1

2

要查找的类XEStoreMicrosoft.SqlServer.Managment.XEvent. 有了这个,您可以查看存在哪些扩展事件会话以及创建新的事件会话。

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();
}
于 2016-12-21T14:59:12.883 回答