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);
            }
        }
Ejemplo n.º 2
0
        private void PersistStatementStatistics(NormalizedStatementStatistics newStatistics)
        {
            var repository = repositories.GetNormalizedStatementStatisticsRepository();
            var uniqueKey  = new NormalizedStatementStatisticsUniqueKey()
            {
                ApplicationName       = newStatistics.ApplicationName,
                DatabaseID            = newStatistics.DatabaseID,
                Date                  = newStatistics.Date,
                NormalizedStatementID = newStatistics.NormalizedStatementID,
                UserName              = newStatistics.UserName
            };
            var oldStatistics = repository.GetByUniqueKey(uniqueKey);

            if (oldStatistics == null)
            {
                repository.Create(newStatistics);
            }
            else
            {
                NormalizedStatementStatisticsMergeUtility.ApplySample(oldStatistics, newStatistics);
                repository.Update(oldStatistics);
            }
        }
Ejemplo n.º 3
0
 public static void ApplySample(NormalizedStatementStatistics cumulativeData, NormalizedStatementStatistics newSample)
 {
     if (newSample.MaxDuration > cumulativeData.MaxDuration)
     {
         cumulativeData.RepresentativeStatement = newSample.RepresentativeStatement;
     }
     cumulativeData.MaxDuration = TimeSpanExtensions.Max(cumulativeData.MaxDuration, newSample.MaxDuration);
     cumulativeData.MinDuration = TimeSpanExtensions.Min(cumulativeData.MinDuration, newSample.MinDuration);
     if (cumulativeData.TotalExecutionsCount > 0 || newSample.TotalExecutionsCount > 0)
     {
         cumulativeData.AvgDuration = TimeSpan.FromMilliseconds(
             (
                 cumulativeData.TotalExecutionsCount * cumulativeData.AvgDuration.TotalMilliseconds
                 + newSample.TotalExecutionsCount * newSample.AvgDuration.TotalMilliseconds
             )
             / (cumulativeData.TotalExecutionsCount + newSample.TotalExecutionsCount)
             );
     }
     else
     {
         cumulativeData.AvgDuration = newSample.AvgDuration;
     }
     cumulativeData.TotalExecutionsCount += newSample.TotalExecutionsCount;
     cumulativeData.TotalDuration        += newSample.TotalDuration;
     if (cumulativeData.MaxTotalCost.HasValue)
     {
         if (newSample.MaxTotalCost.HasValue)
         {
             cumulativeData.MaxTotalCost = Math.Max(cumulativeData.MaxTotalCost.Value, newSample.MaxTotalCost.Value);
         }
     }
     else
     {
         cumulativeData.MaxTotalCost = newSample.MaxTotalCost;
     }
     if (cumulativeData.MinTotalCost.HasValue)
     {
         if (newSample.MinTotalCost.HasValue)
         {
             cumulativeData.MinTotalCost = Math.Max(cumulativeData.MinTotalCost.Value, newSample.MinTotalCost.Value);
         }
     }
     else
     {
         cumulativeData.MinTotalCost = newSample.MinTotalCost;
     }
     if (cumulativeData.AvgTotalCost.HasValue)
     {
         if (newSample.AvgTotalCost.HasValue && (cumulativeData.TotalExecutionsCount > 0 || newSample.TotalExecutionsCount > 0))
         {
             cumulativeData.AvgTotalCost = (cumulativeData.TotalExecutionsCount * cumulativeData.AvgTotalCost.Value
                                            + newSample.TotalExecutionsCount * newSample.AvgTotalCost.Value
                                            )
                                           / (cumulativeData.TotalExecutionsCount + newSample.TotalExecutionsCount);
         }
     }
     else
     {
         cumulativeData.AvgTotalCost = newSample.AvgTotalCost;
     }
 }