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();
}
我正在尝试用 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();
}