Operations Manager Report TSQL Select TOP 10 Average

  • I have a need to create a line graph report in SSRS 2008. The report should show the top 10 servers from a group of servers with the highest CPU utilization for the last day. The report is for Microsoft System Center Operations Manager 2012. I have a SQL query that will return the average CPU for all of the servers in the group, with the average for each hour (24 records per server)

    How can I get the top 10 servers with the highest average CPU? I think I need to create an average of the averages, then select the top 10. Here is the SQL query I have so far:

    Use OperationsManagerDW

    GO

    SELECT

    vPerf.DateTime,

    vPerf.SampleCount,

    cast(vPerf.AverageValue as numeric(10,2)) as AverageCPU,

    vPerformanceRuleInstance.InstanceName,

    vManagedEntity.Path,

    vPerformanceRule.ObjectName,

    vPerformanceRule.CounterName

    FROM Perf.vPerfHourly AS vPerf INNER JOIN

    vPerformanceRuleInstance ON vPerformanceRuleInstance.PerformanceRuleInstanceRowId = vPerf.PerformanceRuleInstanceRowId INNER JOIN

    vManagedEntity ON vPerf.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId INNER JOIN

    vPerformanceRule ON vPerformanceRuleInstance.RuleRowId = vPerformanceRule.RuleRowId

    WHERE

    vPerf.DateTime >= DATEADD(Day, -1, GetDate())

    AND vPerformanceRule.ObjectName like '%Processor Information%'

    AND vPerformanceRuleInstance.InstanceName = '_Total'

    AND (vPerformanceRule.CounterName IN ('% Processor Time'))

    AND (vManagedEntity.Path IN (SELECT dbo.vManagedEntity.Name

    FROM dbo.vManagedEntity INNER JOIN

    dbo.vRelationship On dbo.vManagedEntity.ManagedEntityRowId = dbo.vRelationship.TargetManagedEntityRowId INNER JOIN

    dbo.vManagedEntity As CompGroup On dbo.vRelationship.SourcemanagedEntityRowId = CompGroup.ManagedEntityRowId

    WHERE CompGroup.DisplayName = 'Prod Server Group'

    ))

    ORDER BY path, vPerf.DateTime

  • Slap a TOP predicate on top of your query...

    SELECT TOP 10

    vPerf.DateTime,

    vPerf.SampleCount,

    cast(vPerf.AverageValue as numeric(10,2)) as AverageCPU,

    vPerformanceRuleInstance.InstanceName,

    vManagedEntity.Path,

    vPerformanceRule.ObjectName,

    vPerformanceRule.CounterName

    FROM Perf.vPerfHourly AS vPerf INNER JOIN

    vPerformanceRuleInstance ON vPerformanceRuleInstance.PerformanceRuleInstanceRowId = vPerf.PerformanceRuleInstanceRowId INNER JOIN

    vManagedEntity ON vPerf.ManagedEntityRowId = vManagedEntity.ManagedEntityRowId INNER JOIN

    vPerformanceRule ON vPerformanceRuleInstance.RuleRowId = vPerformanceRule.RuleRowId

    WHERE

    vPerf.DateTime >= DATEADD(Day, -1, GetDate())

    AND vPerformanceRule.ObjectName like '%Processor Information%'

    AND vPerformanceRuleInstance.InstanceName = '_Total'

    AND (vPerformanceRule.CounterName IN ('% Processor Time'))

    AND (vManagedEntity.Path IN (SELECT dbo.vManagedEntity.Name

    FROM dbo.vManagedEntity INNER JOIN

    dbo.vRelationship On dbo.vManagedEntity.ManagedEntityRowId = dbo.vRelationship.TargetManagedEntityRowId INNER JOIN

    dbo.vManagedEntity As CompGroup On dbo.vRelationship.SourcemanagedEntityRowId = CompGroup.ManagedEntityRowId

    WHERE CompGroup.DisplayName = 'Prod Server Group'

    ))

    ORDER BY path, vPerf.DateTime

  • Thanks for the response. I cannot use a select top 10. With SELECT TOP 10, the top 10 records are returned. There will be 24 records for each server. We need the average CPU per hour.

    DateTimeSample CountAverageCPUInstanceNamePathObjectNameCounterName

    3/10/15 12:00 AM22.07_TotalAS149163.bemisco.netProcessor Information% Processor Time

    3/10/15 1:00 AM22.1_TotalAS149163.bemisco.netProcessor Information% Processor Time

    3/10/15 2:00 AM21.81_TotalAS149163.bemisco.netProcessor Information% Processor Time

    3/10/15 3:00 AM43.31_TotalAS149163.bemisco.netProcessor Information% Processor Time

    3/10/15 4:00 AM54.36_TotalAS149163.bemisco.netProcessor Information% Processor Time

    3/10/15 5:00 AM22.08_TotalAS149163.bemisco.netProcessor Information% Processor Time

    So for the group of servers, which ones (top 10) have the highest CPU utilization?

Viewing 3 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic. Login to reply