我正在尝试用C#编写一些简单的扩展事件管理代码,但对它来说还是比较新的。我能够在SSMS中设置XEvent会话,并能够使用this example
从C#中创建的会话中获取Linq流我现在想做的是能够在给定数据库中查询存在的会话。我可以手动查询sys.dm_xe*
表并为这些表创建映射类,但看起来这些类已经存在于Microsoft.SqlServer.Management.XEvent命名空间中 - 所以我讨厌做一个糟糕的重新实现,如果有的话已经存在。
保存会话的特定表格为sys.dm_xe_sessions
。
感谢任何示例代码或帮助。谢谢!
答案 0 :(得分:1)
要查找的课程为XEStore
Microsoft.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();
}