SQL Server-데이터베이스 파일 증가에 대한 모범 사례


16

SQL Server 2008 r2의 데이터 수집기를 통해 2 주 동안 파일 증가를 모니터링하고 있습니다. 데이터베이스는 하루에 약 35MB로 꾸준히 성장하고 있습니다. DB가 아직 초기 크기 인 2GB에 도달하지 않았습니다.

DB 파일 자동 증가가 5MB로 설정되어 있으며 다른 접근법을 시도하고 싶습니다. 제안이나 의견을 찾고 있습니다.

매주 일요일 밤 오전 1시 30 분에 실행되는 조정 작업이 있습니다. 과제는 :

  • 데이터베이스 무결성 검사
  • 로그 파일 축소 – (로깅 모드가 단순하기 때문에 괜찮습니다)
  • 데이터베이스 축소
  • 인덱스 재구성
  • 인덱스 재 구축
  • 통계 업데이트
  • 정리 기록

주간 튜닝 계획에 두 단계를 더 추가하고 싶습니다.

  1. 사용 된 공간이 특정 임계 값 또는 총 크기에 도달하면 데이터베이스 파일을 500MB 씩 늘리십시오.
  2. 사용 된 공간이 총 크기의 특정 임계 값에 도달하면 로그 파일을 250MB (축소 후) 증가시킵니다.

오프라인 시간에 성장 부담을 가짐으로써,로드가 많은 동안 자동 성장 이벤트 수를 줄임으로써 성능을 얻고 자합니다.

자동 증가 파일과 관련하여 두 가지 질문이 있습니다.

  • 파일 증가 단계를 배치하는 가장 좋은 장소는 현재 단계 이전 또는 이후입니까?
  • 를 사용하여 ALTER DATABASE|MODIFY FILE파일을 늘리면 어떻게 확인할 수 SpaceUsedInFile >= (TotalFileSpace-@AllowanceThreshold)있습니까?

2
DB는 절대 커지지 않는 충분한 크기를 가져야합니다 . 그보다 적은 값으로 인스턴트 파일 초기화 가 활성화되어 있는지 확인하십시오 .
Remus Rusanu

3
@Remus는 이상적이지만 경력 전체에서 모든 데이터베이스의 크기를 완벽하게 미리 정했다고 말하고 있습니까? 항상 추측과 관련된 조정 작업이 필요합니다. 성장을 통제해야하며 하루에 7 번만 그렇게해야한다는 데 동의합니다.
Aaron Bertrand

3
@AaronBertrand : 단순하고 과장된 조언을 선호 합니다. 시간이지나면서 더 잘 붙습니다. 대부분의 사용자는 '의존적'을 처리 할 수 ​​없으며, 흑백 사이에 회색 음영이 있다는 것을 스스로 알아낼 수있는 사람들도 있습니다.
Remus Rusanu

3
@ DanAndrews : 초과 할당은 '하류'에 영향을 줄 수 있습니다. dev에 만은 ... 1GB의 데이터에 대한 두 가지 새로운 1TB 드라이브를 필요로 발견 자신의 컴퓨터에 DB를 복원하려고 생각
레무스 Rusanu

2
나는 악마의 옹호자 만 연주하고 있습니다. 그러나 HD는 저렴합니다. 재구성을위한 생산 시간 손실 및 성능 손실은 비쌉니다.
Dan Andrews

답변:


24

가능한 한 적은 양으로 자동 자라기를 목표로해야합니다. 즉석 파일을 초기화하더라도 하루에 7 번은 많은 비용이 듭니다.

수축 데이터베이스를 수행하지 마십시오. 이제까지. 축소 파일 일 수도 있지만 특별한 이벤트 후에 만 ​​가능합니다. 다시 자라기 위해 축소하는 것은 무익한 운동이며 실제로는 자동 조각이라고합니다.

복구 모델이 단순하다면 지구상에서 로그 파일을 250GB 늘릴 필요가 없습니다. 한 달 전에 트랜잭션을 시작하고 커밋하거나 롤백 할 의도가없는 한 파일의 사용 된 공간은 시간이 지남에 따라 자동으로 정리됩니다.

그래서 내 조언은 다음과 같습니다.

조용한 기간 동안 데이터 파일을 몇 개월 동안 증가 할 수있는 크기로 수동으로 자동 증가시킵니다. 그 동안 무엇을 절약하고 있습니까?

데이터 파일의 자동 증가 증분을 비교적 작은 것으로 설정하고 (발생할 때 사용자를 방해하지 않도록)이 이벤트에 대해 경고합니다 (예 : 기본 추적 또는 확장을 통해이를 잡을 수 있음) 이벤트). 이것은 당신이 당신이 추정 한 고점에 도달하고 있고 수동으로 다시 성장할 시간이라는 것을 알 수 있습니다. 이 시점에서 공간을 수용하기 위해 다른 드라이브에 새 파일 / 파일 그룹을 추가하려는 경우를 대비하여이 매뉴얼을 유지해야합니다. 결국 현재 드라이브를 채 웁니다.

예를 들어, 로그 파일을 최대 두 배로 자동 증가시킵니다. 비정상적인 트랜잭션이 발생하지 않는 한 더 이상 자동 증가하지 않아야합니다. 이 이벤트를 모니터하여 이벤트에 대해 알아야합니다.


입력 해 주셔서 감사합니다 ... 로그 파일을 늘리고 잠시 동안 모니터링하는 것에 대한 조언을 드리겠습니다. 자폐증 크기의 MB에 GB를 잘못 사용했습니다. 나는 수축 데이터베이스가 의도했던 것을하고 있다고 생각하지 않습니다. 연말에 DB는 15GB에 도달했으며 작업이 생성 될 때 백업을위한 공간이 부족했습니다.

+1은 자동 조각이라고합니다.-) 이미 연결 문제를 시작 했습니까? :-)
marc_s

10

자동 성장은 가능하면 피해야하는 것입니다. 문제는 성장이 발생할 수있는시기를 제어 할 수없고 그렇게하는 동안 시스템이 심각한 타격을받을 수 있다는 것입니다.

파일 크기를 한 달 정도의 합리적인 크기로 설정하고 X 시간 동안 예상되는 공간을 계산하고 크기를 해당 오차 + 마진으로 설정하여 증가율을 모니터링하십시오.

파일 크기가 자동 증가 전에 미리 정의 된 최대 값에 도달하면 경고하는 간단한 모니터링 작업을 설정했습니다. 다음과 같은 것을 사용할 수 있습니다.

SELECT instance_name,
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
       into ##Logsize
FROM
(
   SELECT *
   FROM sys.dm_os_performance_counters
   WHERE counter_name IN
   (
       'Data File(s) Size (KB)',
       'Log File(s) Size (KB)',
       'Log File(s) Used Size (KB)',
       'Percent Log Used'
   )
     AND instance_name = 'database your interested in' 
) AS Src
PIVOT
(
   MAX(cntr_value)
   FOR counter_name IN
   (
       [Data File(s) Size (KB)],
       [LOG File(s) Size (KB)],
       [Log File(s) Used Size (KB)],
       [Percent Log Used]
   )
) AS pvt 
go
declare @logsize int
Select @logsize = [Percent Log Used] from ##Logsize

If @logsize > the maximum percent you want the log to fill too i.e 90
    BEGIN
        --Do your thing here
    END

Drop table ##Logsize

이것은 물론 직업으로 예약 될 수 있습니다.


"AND instance_name = '관심있는 데이터베이스"를 제거하여 모든 데이터베이스를 반환합니다. 그런 다음 IF 문에서 로그 크기가 임계 값보다 큰 계수를 사용하십시오. 카운트가 1보다 높으면 temp 테이블에서 select name 문을 사용하여 sp_send_dbmail을 수행하여 로그 이름을 한계 이상으로 전자 메일로 보냅니다.
Nick Winstanley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.