본문 바로가기
㏈ª By β┖υΕJini/MS-SQL

데이터베이스 LOG 관리

by ㏈ª ☞ β┖υΕJini.κR 2008. 11. 18.

예전 DB 가이드에서 김현종 씨라는 분이 작성하신 글을 옮겨 보았습니다.^^

가끔 DB를 관리하다가 보면 DB 로그가 예상보다 오버되어 HDD를 full내서 DB가 다운되는 되는 현상을 겪으셨거나 혹은 겪을 수도 있으실 것입니다.
그런 부분을 미리 방지하고자 제가 사용하는 방지 방법입니다.

일단 크게 정리를 하자면
1. 로그 사이즈를 알아본다.(DBCC SQLPERF(logspace))
2. 로그 사이즈를 필요한 부분만 DB화 한다.(master, model, pub 등 system 기본 DB 제외)
3. 기준을 세워 로그를 관리한다.
A. 제가 잡은 기준은 설정 로그 사이즈에 50%
4. 문제가 생긴 로그 받기
A. 분석 내용을 email로 받도록 한다.
B. 분석 내용을 SMS 로 받도록 한다.
5. 문제가 생긴 부분을 분석하여 로그를 백업만 하면 될 것인지, 아니면 기본 로그 사이즈를 증가 할 것인지 판단하도록 한다.

로그 사이즈 알아 보기
로그 사이즈는 DBCC SQLPERF(logspace) 명령어로 손쉽게 알아 볼 수 있습니다.
 [실행]
EXEC DBCC SQLPEF(LOGSPACE)
 [결과]
 

로그 사이즈 DB화 하기
 로그 사이즈를 DB에 입력해 넣는다.
 [실행]
create table #temp(
 Database_name varchar(50),
 Log_size FLOAT,
 log_space_used FLOAT,
 status TINYINT
)

INSERT #temp
EXEC('DBCC SQLPERF(LOGSPACE)')

INSERT LOG_SPACE_CONTROL(database_name, Log_size, log_space_used, status)
SELECT * FROM #temp
WHERE Database_name not in (
'master'
,'tempdb'
,'model'
,'msdb'
,'pubs'
,'Northwind'
)

DROP TABLE #temp
 로그를 입력할 때 시스템 관련 table은 남기지 않습니다.
 이런 스크립트를 DB 작업으로 만들어서 매일 새벽에 돌려서 table에 기록을 남깁니다.
 (오늘 날짜와 함께)

기준 세워 로그 관리
 제가 기준은 50%로 잡았습니다.
일단 로그에 문제가 나도 바로 작업이 될 수 없고 1~2일 정도는 문제를 처리하지 못하는 상황이 발생할 수도 있기에 잡은 기준입니다.
 관리 담당자가 운영에 필요한 기준을 잡으면 될 것 같습니다.
 [실행]
SELECT Database_name
 FROM log_space_control
 WHERE log_space_used > 50
and sd_date >= convert(varchar(10),dateadd(dd,-1,getdate()),20)

문제가 생긴 로그 받기
 로그를 실시간으로 모니터링이 불가능 하니 특정 작업 시간에 로그를 남긴 것을 남긴 후
email이나 SMS 와 같은 서비스를 이용하여 피드백을 받도록 합니다.
저 같은 경우는 SMS 로 받도록 하고 있습니다.
이 부분에 대해서는 편리하신 방법을 적용 하시면 될 것 같습니다

문제 로그 분석 판단
 로그에 문제가 생겨서 피드백을 받게 된다면 로그의 처리 방안을 생각 하셔야 하는데
 일단은 로그를 백업 후 삭제 할 수가 있을 것 같습니다.
 [실행]
Backup log db명 옵션

그리고 로그의 문제가 관리가 안되어서 그럴수도 있지만 원래 로그의 크기가 적어서 그럴 수도 있으니 같이 검토가 필요할 것입니다.
 보통 로그의 크기는 데이터 파일(MDF)에 20~30%의 크기를 잡는 것이 일단 적입니다.