perfmon 데이터베이스가 대단히 커져 분석이 힘들때 따로 구성하는 방법
수 년간 성능 데이터를 데이터베이스에 저장하게 되면, perfmon 프로그램으로 해당 데이터베이스를 열어 분석 하고자 할 때 대단히 오랜 시간이 걸린다. 해당 서버와 해당 카운터만 골라와 빠르게 분석하고자 한다면 다음 방법을 사용한다.
특정 기간의 데이터만 잘라 3개의 테이블로 담아 데이터베이스를 구성한다.
Select * into 테이블이름같게 from (select * from 같은테이블 where 조건) a
여기서 SQL Server 를 선택 하도록 한다. ***
RESTORE FILELISTONLY FROM DISK ='D:\CAFE\PERF2\PERF2.BAK'
GO
RESTORE DATABASE PERF0518BBS2 FROM DISK ='D:\CAFE\PERF2\PERF2.BAK'
WITH MOVE 'PERF2' TO 'D:\PERF0518BBS2.MDF'
, MOVE 'PERF2_LOG' TO 'D:\PERF0518BBS2.LDF'
USE master
GO
-- 데이터 베이스 속성 변경
ALTER DATABASE PERF0518BBS2 SET RECOVERY SIMPLE
GO
ALTER DATABASE [perf0518bbs2] MODIFY FILE ( NAME = N'perf2', FILEGROWTH = 512000KB )
GO
ALTER DATABASE [perf0518bbs2] MODIFY FILE ( NAME = N'perf2_log', SIZE = 512000KB , FILEGROWTH = 512000KB )
GO
USE PERF0518BBS2
GO
-- 데이터 보정
declare @recordindex_reset int
, @min_counterdatetime varchar(100)
, @max_counterdatetime varchar(100)
, @min_counterid int
, @number_of_record int
select @recordindex_reset = MIN(RecordIndex) - 1
, @min_counterdatetime= min(counterdatetime)
, @max_counterdatetime = MAX(counterdatetime)
, @min_counterid = MIN(counterid)
from dbo.CounterData
select @number_of_record = COUNT(*) from CounterData where CounterID = @min_counterid
if (@recordindex_reset > 1) begin
update dbo.CounterData set recordindex = RecordIndex - @recordindex_reset
update dbo.DisplayToID set
logstarttime = @min_counterdatetime
, logstoptime = @max_counterdatetime
, numberofrecords = @number_of_record
end
-- 인덱스 생성
CREATE CLUSTERED INDEX [CL_COUNTERDATA] ON [DBO].[COUNTERDATA]
(
[GUID] ASC,
[COUNTERID] ASC,
[RECORDINDEX] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
-- 데이터 확인
select top 100 * from dbo.CounterData
select * from dbo.CounterDetails
select * from dbo.DisplayToID