private void ProcessRelations(IEnumerable <IRelationStatistics> relations, DateTime collectedDate, bool isStatisticsResetDetected) { foreach (var r in relations) { var lastValue = GetLastValue <IRelationStatistics>(r.ID); TotalRelationStatistics diff = null; if (!isStatisticsResetDetected && lastValue != null && !r.Equals(lastValue)) { diff = new TotalRelationStatistics() { CreatedDate = DateTime.Now, DatabaseID = r.DatabaseID, Date = collectedDate, IndexScanCount = Math.Max(r.IndexScanCount - lastValue.IndexScanCount, 0), IndexTupleFetchCount = Math.Max(r.IndexTupleFetchCount - lastValue.IndexTupleFetchCount, 0), RelationID = r.ID, SeqScanCount = Math.Max(r.SeqScanCount - lastValue.SeqScanCount, 0), SeqTupleReadCount = Math.Max(r.SeqTupleReadCount - lastValue.SeqTupleReadCount, 0), TupleDeleteCount = Math.Max(r.TupleDeleteCount - lastValue.TupleDeleteCount, 0), TupleInsertCount = Math.Max(r.TupleInsertCount - lastValue.TupleInsertCount, 0), TupleUpdateCount = Math.Max(r.TupleUpdateCount - lastValue.TupleUpdateCount, 0) }; } relationStatistics.AddOrUpdate(r.ID, new TotalRelationStatisticsSampler(dateTimeSelector, diff), (k, v) => { if (diff != null) { v.AddSample(diff); } return(v); }); SaveLastValue(r.ID, r); } }
public static void ApplySample(TotalRelationStatistics cumulativeData, TotalRelationStatistics newSample) { cumulativeData.IndexScanCount += newSample.IndexScanCount; cumulativeData.IndexTupleFetchCount += newSample.IndexTupleFetchCount; cumulativeData.SeqScanCount += newSample.SeqScanCount; cumulativeData.SeqTupleReadCount += newSample.SeqTupleReadCount; cumulativeData.TupleDeleteCount += newSample.TupleDeleteCount; cumulativeData.TupleInsertCount += newSample.TupleInsertCount; cumulativeData.TupleUpdateCount += newSample.TupleUpdateCount; }
private void PersistTotalRelationStatistics(TotalRelationStatistics newStatistics) { var repository = repositories.GetTotalRelationStatisticsRepository(); var uniqueKey = new TotalRelationStatisticsUniqueKey() { DatabaseID = newStatistics.DatabaseID, Date = newStatistics.Date, RelationID = newStatistics.RelationID }; var oldStatistics = repository.GetByUniqueKey(uniqueKey); if (oldStatistics == null) { repository.Create(newStatistics); } else { TotalRelationStatisticsMergeUtility.ApplySample(oldStatistics, newStatistics); repository.Update(oldStatistics); } }