public void PublishNormalizedStatementStatistics(LogEntryStatementStatisticsData statementStatisticsData) { var key = statementStatisticsData.NormalizedStatementFingerprint; var sample = new NormalizedStatementStatistics() { ApplicationName = statementStatisticsData.ApplicationName, AvgDuration = statementStatisticsData.Duration, AvgTotalCost = statementStatisticsData.TotalCost, CreatedDate = DateTime.Now, DatabaseID = statementStatisticsData.DatabaseID, Date = statementStatisticsData.ExecutionDate, MaxDuration = statementStatisticsData.Duration, MinDuration = statementStatisticsData.Duration, RepresentativeStatement = statementStatisticsData.Statement, TotalDuration = statementStatisticsData.Duration, TotalExecutionsCount = 1, UserName = statementStatisticsData.UserName, MinTotalCost = statementStatisticsData.TotalCost, MaxTotalCost = statementStatisticsData.TotalCost }; lock (lockObject) { if (!statementStatistics.ContainsKey(key)) { statementStatistics.Add(key, new NormalizedStatementStatisticsSampler(dateTimeSelector, null)); } } lock (String.Intern(key)) { statementStatistics[key].AddSample(sample); } }
protected override void OnExecute() { var stats = new LogEntryStatementStatisticsData() { ApplicationName = context.Entry.ApplicationName, DatabaseID = context.DatabaseID, Duration = context.Entry.Duration, ExecutionDate = context.Entry.Timestamp, NormalizedStatementFingerprint = context.StatementData.NormalizedStatementFingerprint, Statement = context.Entry.Statement, UserName = context.Entry.UserName }; stats.TotalCost = context.QueryPlans.Sum(x => x.TotalCost); statementDataAccumulator.PublishNormalizedStatementStatistics(stats); }