2016-12-15 47 views
0

我想在C#中編寫一些簡單的擴展事件管理代碼,但對它來說是相當新的。我能夠在SSMS中設置XEvent會話,並且能夠從C#中創建的會話中獲取Linq流。使用this exampleC#如何獲得給定數據庫中的XEvent會話列表

我現在想要做的是能夠查詢給定數據庫中存在的會話。我可以手動查詢sys.dm_xe*表併爲這些表創建映射類,但它看起來像這些類已經存在於Microsoft.SqlServer.Management.XEvent名稱空間中 - 所以如果已經存在,我不願意做一個糟糕的重新實現。

舉行會話的具體表格是sys.dm_xe_sessions

任何示例代碼或幫助表示讚賞。謝謝!

+0

'sys.dm_xe_sessions'應該返回活動的XEvent會話。 'sys.server_event_sessions'返回所有的XEvent會話,包括那些不活躍的會話。那是你在找什麼? (我不確定你是否在尋找C#或TSQL代碼。) – DMason

回答

0

要尋找的類是的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(); 
}