public wait_stats Subtract(wait_stats instance)
    {
        double ticksDelta       = ticks - instance.ticks;
        var    ticksDeltaFactor = Stopwatch.Frequency / ticksDelta;
        var    result           = new wait_stats
        {
            max_wait_time_ms = max_wait_time_ms,
            wait_per_task_ms = wait_per_task_ms,

            signal_wait_time_s_raw  = signal_wait_time_s - instance.signal_wait_time_s,
            waiting_tasks_count_raw = waiting_tasks_count - instance.waiting_tasks_count,
            wait_time_s_raw         = wait_time_s - instance.wait_time_s,

            ticks = (long)ticksDelta
        };

        result.signal_wait_time_s  = result.signal_wait_time_s_raw * ticksDeltaFactor;
        result.waiting_tasks_count = result.waiting_tasks_count_raw * ticksDeltaFactor;
        result.wait_time_s         = result.wait_time_s_raw * ticksDeltaFactor;

        return(result);
    }
Example #2
0
        static async Task <MetricTelemetry[]> GetPageLatchStats()
        {
            var query = @"select waiting_tasks_count, wait_time_s, max_wait_time_ms, signal_wait_time_s, wait_per_task_ms from qpi.wait_stats where wait_type = 'PAGELATCH_EX'";

            using var connection = new SqlConnection(Configuration.ConnectionString);

            var result = await connection.QueryFirstOrDefaultAsync <wait_stats>(query);

            result.ticks = Stopwatch.GetTimestamp();

            var delta = result.Subtract(previous);

            Console.WriteLine(delta);

            var metrics = new[]
            {
                // From DELTA
                new MetricTelemetry
                {
                    Name  = "PAGELATCH_EX - waiting_tasks_count (delta)",
                    Sum   = delta.waiting_tasks_count,
                    Count = 1                                                   // Maybe  this could just the time period like the ticks?
                },
                new MetricTelemetry
                {
                    Name  = "PAGELATCH_EX - wait_time_s (delta)",
                    Sum   = delta.wait_time_s,
                    Count = 1,
                },
                new MetricTelemetry
                {
                    Name  = "PAGELATCH_EX - signal_wait_time_s (delta)",
                    Sum   = delta.signal_wait_time_s,
                    Count = 1
                },

                // From DELTA RAW
                new MetricTelemetry
                {
                    Name  = "PAGELATCH_EX - waiting_tasks_count_raw (delta)",
                    Sum   = delta.waiting_tasks_count_raw,
                    Count = 1
                },
                new MetricTelemetry
                {
                    Name  = "PAGELATCH_EX - wait_time_s_raw (delta)",
                    Sum   = delta.wait_time_s_raw,
                    Count = 1
                },
                new MetricTelemetry
                {
                    Name  = "PAGELATCH_EX - signal_wait_time_s_raw (delta)",
                    Sum   = delta.signal_wait_time_s_raw,
                    Count = 1
                },

                new MetricTelemetry
                {
                    Name  = "PAGELATCH_EX - delta_s (delta)",
                    Sum   = delta.ticks / (double)Stopwatch.Frequency,
                    Count = 1
                },

                // From RESULT
                new MetricTelemetry
                {
                    Name  = "PAGELATCH_EX - waiting_tasks_count",
                    Sum   = result.waiting_tasks_count,
                    Count = 1
                },
                new MetricTelemetry
                {
                    Name  = "PAGELATCH_EX - wait_time_s",
                    Sum   = result.wait_time_s,
                    Count = 1
                },
                new MetricTelemetry()
                {
                    Name  = "PAGELATCH_EX - max_wait_time_ms",
                    Sum   = result.max_wait_time_ms,
                    Count = 1
                },
                new MetricTelemetry
                {
                    Name  = "PAGELATCH_EX - signal_wait_time_s",
                    Sum   = result.signal_wait_time_s,
                    Count = 1
                },
                new MetricTelemetry()
                {
                    Name  = "PAGELATCH_EX - signal_wait_time_s",
                    Sum   = result.signal_wait_time_s,
                    Count = 1
                },
                new MetricTelemetry()
                {
                    Name  = "PAGELATCH_EX - wait_per_task_ms",
                    Sum   = result.wait_per_task_ms,
                    Count = 1
                }
            };

            previous = result;
            return(metrics);
        }