2007~2011/SQL Server2010. 8. 25. 20:55

Microsoft Operations Manager(MOM) 2000 데이터베이스의 Report collection - % Processor Time 규칙을 활성화 하여 저장되어 있는 각 서버들의 성능 정보 데이터를 쿼리를 통해 가져오는 방법에 대해서 아래와 같이 정리하였습니다.

MOM 2000 OnePoint 데이터베이스에 저장된 테이블 중 성능과 관련이 있는 테이블은 아래와 같습니다.

1. SampledNumericData
    - 수집된 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 정보를 따로 관리하기 위해 별도의 테이블을 생성하는 사용자 프로시저를 아래와 같이 만들었습니다. 쿼리 디자인 경험이 없어 스크립트가 산만합니다만 필요에 의해 냅따 만들어 놓은 녀석입니다.

CREATE PROC uspPerfProcData
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

Posted by Lai Go