Итак, как посоветовал Рим, SCOM имеет две базы данных. Операционный и хранилище данных. MP, который собирает данные о производительности, должен явно сохранять собранные данные в БД или и то, и другое. Обычно вы ожидаете, что данные будут сохранены в обоих БД из хорошо продуманного MP. Основное различие между БД заключается в том, что операционный БД хранит почти «реальные» данные (интервал 10-20 минут), но DW DB имеет ежечасные и суточные агрегированные данные.
Отсюда я могу привести несколько примеров на обеих БД.
Оперативная БД:
Этот запрос содержит список всех доступных имен объектов, их экземпляров и соответствующий счетчик для конкретного компьютера Windows, однако, вы можете изменить запрос для других классов:
select pc.* from PerformanceCounterView pc join TypedManagedEntity tme on tme.TypedManagedEntityId = pc.ManagedEntityId join BaseManagedEntity bme on tme.BaseManagedEntityId = bme.BaseManagedEntityId where (bme.TopLevelHostEntityId = (select BaseManagedEntityId from BaseManagedEntity where FullName = 'Microsoft.Windows.Computer:'[email protected])) order by ObjectName, CounterName, InstanceName
Затем, когда вы получите PerformanceSourceInternalId
, вы можете извлечь фактические данные, выполнив следующий запрос:
declare @TZOffset as int = DATEDIFF(MINUTE,GETUTCDATE(),GETDATE())
SELECT SampleValue, DATEADD(MINUTE,@TZOffset,TimeSampled) as TS
FROM PerformanceDataAllView
where (PerformanceSourceInternalId = @SrcID)
and (TimeSampled > DATEADD(MINUTE,[email protected],@Start))
and (TimeSampled < DATEADD(MINUTE,[email protected],@End))
NB: все метки времени в обеих БД находятся в формате UTC, поэтому последний запрос переводит их обратно в локальное время.
хранилища данных DB:
DECLARE @StartDateSubParam as datetime DECLARE @CurrentServerSubParam as int SET @StartDateSubParam = '2016-01-01' SET @CurrentServerSubParam =(select mecn.ManagedEntityRowId from vManagedEntity mecn where (mecn.Path is null) and (mecn.FullName like 'Microsoft.Windows.Computer:yourServer.Domain.com')) select me.[Path] as ServerName, me.ManagedEntityRowId as ManagedEntityID, AverageValue, MaxValue, MinValue, perfdata.StandardDeviation, perfdata.[DateTime] as SampleDay from Perf.vPerfHourly perfdata join vPerformanceRuleInstance pri on perfdata.PerformanceRuleInstanceRowId = pri.PerformanceRuleInstanceRowId join vPerformanceRule pr on pr.RuleRowId = pri.RuleRowId left join vManagedEntity me on me.ManagedEntityRowId = perfdata.ManagedEntityRowId where (pr.ObjectName = 'Processor Information') and (pr.CounterName = '% Processor Time') and (perfdata.[DateTime] > @StartDateSubParam) and (me.TopLevelHostManagedEntityRowId = @CurrentServerSubParam)
Этот запрос выбора производительности процессора для компьютера окна с ОС Windows 2008 R2 + (изменение Процессор информации -> Процессор для ранних версий Windows). Вы можете изменить имена на другие доступные счетчики, а также использовать vPerfHourly
или vPerfDaily
для почасовой или дневной агрегации.
С уважением.