Microsoft Operations Manager(MOM) 2000 데이터베이스의 Report collection - % Processor Time 규칙을 활성화 하여 저장되어 있는 각 서버들의 성능 정보 데이터를 쿼리를 통해 가져오는 방법에 대해서 아래와 같이 정리하였습니다.
MOM 2000 OnePoint 데이터베이스에 저장된 테이블 중 성능과 관련이 있는 테이블은 아래와 같습니다.
- 수집된 Raw 데이터가 저장된 테이블
- idSampledNumericData, idSampledNumericDataSource, TimeSampled, SampleValue
2. SampledNumericDataSource
- 수집할 성능 개체의 Data Source ID 를 확인할 수 있는 테이블
- idSampledNumericDataSource, idComputer, idPerfmonCounterScale, InstanceName, LastSampledNumericData
3. Computer
- 컴퓨터 이름이 저장된 테이블
- idComputer, Name, Description, CustomData1, CustomData2
4. PerfmonCounterScale
- Performance Provider 정보 확인 테이블 (% Processor Time)
- idPerfmonCounterScale, ObjectName, CounterName, ScaleFactor, ScaleLegend
- % Processor Time : 836717FB-17EE-4FC5-96FC-B8A948E83FDE
SampledNemericData 테이블에는 규칙 설정에 의해 5분 단위로 Processor Time 성능 정보가 기록되고 있으며 지정한 특정 서버에 대해 1일 전 Processor Time 정보를 따로 관리하기 위해 별도의 테이블을 생성하는 사용자 프로시저를 아래와 같이 만들었습니다. 쿼리 디자인 경험이 없어 스크립트가 산만합니다만 필요에 의해 냅따 만들어 놓은 녀석입니다.
AS
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'TblPerfProcData' AND TYPE = 'U')
DROP TABLE TblPerfProcData
CREATE TABLE TblPerfProcData
(
ComName NVARCHAR(255)
, TimeSampled DATETIME
, PerfProcessor float
)
-- 테이블 변수 선언
DECLARE @PerfComputer TABLE (
nid INT IDENTITY (1,1) not null
, computerid UNIQUEIDENTIFIER not null
, comname NVARCHAR(255)
)
INSERT @PerfComputer(computerid, comname) SELECT [idComputer], [NAME] FROM Computer WHERE [Description] = '성능 정보 관리 대상 서버'
DECLARE @i INT
, @maxno INT
, @computerid VARCHAR(40)
, @PerfIdProcessorTime VARCHAR(40)
, @SourceIdProcessorTime VARCHAR(40)
, @PerfDate VARCHAR(10)
, @computername NVARCHAR(255)
-- idPerfmonCounterScale
SET @PerfIdProcessorTime = '836717FB-17EE-4FC5-96FC-B8A948E83FDE'
-- 1일 전
SET @PerfDate = CONVERT(VARCHAR(10), GETDATE()-1, 121)
SELECT @i = 1, @maxno = MAX(nid) FROM @PerfComputer -- 변수 초기화
WHILE @i <= @maxno
BEGIN
-- idcomputer, computer name
SELECT @computerid = computerid, @computername = comname
FROM @PerfComputer WHERE nid = @i
-- % Processor Time Source Data
SELECT @SourceIdProcessorTime = idSampledNumericDataSource
FROM SampledNumericDataSource with (nolock)
WHERE @computerid = idcomputer AND idPerfmonCounterScale = @PerfIdProcessorTime
-- TblPerfProcData테이블에 수집된 Processor 성능 정보 기록
INSERT INTO TblPerfProcData (COMNAME, TimeSampled, PerfProcessor)
SELECT @computername, [TimeSampled], [SampleValue]
FROM SampledNumericData with (nolock)
WHERE idSampledNumericDataSource = @SourceIdProcessorTime
AND CONVERT(VARCHAR(10), TimeSampled, 121) = @PerfDate
SET @i = @i + 1
END
[실행결과]
Server TimeSampled % Processor Time
-------------------------------------------------------------------------
LAIGOAPP1 2010-08-24 00:04:59.993 76.68993469658915
LAIGOAPP1 2010-08-24 00:10:00.020 77.5505332484908871
.....
LAIGOAPP2 2010-08-24 00:04:59.999 46.68993469658915
작성자 : Lai Go / 작성일자 : 2010.08.25