성능에 영향을주지 않고 대용량 SQL Server 데이터베이스를 어떻게 백업 할 수 있습니까?


18

우리는 쿼리가 느리게 실행되거나 아침 일찍 시간이 초과되었다는보고를 받았으며, 이것에 영향을 줄 수 있다고 생각되는 유일한 작업은 데이터베이스 백업 작업입니다.

데이터베이스 자체는 약 300GB이며 백업 작업은 오전 4시 30 분에 시작하여 오전 7시 이후에 완료되지 않습니다. 백업 작업의 현재 구문은 다음과 같습니다.

BACKUP DATABASE [DatabaseName]
TO DISK = N'E:\Database Backups\DatabaseName.Bak'
WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak',
NOSKIP, STATS = 10, NOFORMAT

E:\ 데이터베이스와 데이터베이스 백업을 모두 보유하는 서버의 파티션입니다.

또한이 서버는 전용 독립형 서버가 아니라 가상 서버라는 점에 유의해야합니다. 가상 서버로 전환 한 직후 백업 과정에서 속도 저하에 대한 불만이 제기되기 시작했기 때문에 관련이 있다고 생각합니다.

이 백업 작업을 실행하여 실행 중에 쿼리 성능에 영향을 미치지 않는 방법이 있습니까?

우리는 SQL Server 2005를 사용하고 있습니다

답변:


21
  1. 시스템의 나머지 I / O에서 백업 I / O를 분리하십시오. 시간이 더 걸리고 딸꾹질에 걸리기 쉽지만 로컬 디스크 대신 네트워크를 통해 백업하면 인스턴스에 대한 직접적인 영향을 완화하는 데 도움이 될 수 있습니다. 가상 컴퓨터에서도 SQL Server가 다른 I / O 하위 시스템에 쓸 수 있도록 다른 저장소를 노출 할 수 있어야합니다.
  2. 어떤 차이도 생기지 않을 것입니다. 그러나 이것이 작업에서 실행되면 왜 STATS옵션 을 사용해야 합니까? 당신은 당신이 다른 옵션을 필요로 확신 ( NOUNLOAD, NOSKIP, NOFORMAT)? 전체 옵션 매트릭스에 대해 광범위한 성능 테스트를 수행하지는 않았지만 IMHO에서는 필요한 옵션 만 사용해야합니다.
  3. 정기적 인 사용자 활동을 방해하지 않는 다른 시간에 전체 백업을 실행하십시오. 이것이 항상 가능한 것은 아니지만 24/7 작업에서도 피크 및 루어 시간이 있습니다.
  4. 2008+로 이동하면 백업 압축 (2008 년 Enterprise, 2008 년 Standard 또는 Enterprise R2 +)을 활용할 수 있습니다. 2008로 이동할 수 없거나 적절한 버전이없는 경우 압축을 수행하는 타사 백업 도구가 있으며 모두 능숙합니다. 2008 년부터 네이티브 압축을 사용할 수 있었으며 타사에 더 이상 투자 할 필요없이 속도와 압축률 모두에 만족했습니다. 그러나 2005 년에는 Red-Gate SQL Backup을 통해 성공을 거둔 것을 기억합니다 . Quest LiteSpeed 도 꽤 좋지만 Dell 인수 이후 어떤 노력을 기울이고 있는지 전혀 알지 못합니다.
  5. 데이터베이스가 전체 복구 상태 인 경우 전체 백업간에 더 오래 갈 수 있으며 특정 시점으로 복구해야 할 경우 더 많은 로그를 복원 할 수 있다는 것을 알고 있습니다. 이 옵션을 일주일 내내 diff 복용에 대한 Ali의 제안과 결합 할 수 있습니다. 목요일에 복구해야한다면, diff 이후 전체 1 개, 1 개 diff 및 로그를 복원해야합니다.
  6. 오래되고 변경되지 않는 많은 데이터가있는 경우 다른 복구 계획을 가진 다른 데이터베이스에서 또는 적어도 다른 파일 그룹에서 데이터를 호스팅하고 백업 작업을 그런 식으로 분할하는 것을 고려할 수 있습니다. 읽기 전용으로 만들 수있는 참조 또는 아카이브 데이터가 있고 단순 복구 인 경우 해당 데이터를 자체 읽기 전용 파일 그룹으로 이동하고 한 번 백업 한 후 야간 백업에 포함하지 않아도됩니다. 다시. 다음 MSDN 주제를 참조하십시오.

단편 복원 수행

예 : 일부 파일 그룹의 단편 복원 (단순 복구 모델)


시스템의 나머지 I / O에서 백업 I / O를 격리하는 방법에 대해 더 자세히 배울 수있는 올바른 방향을 알려주시겠습니까? 오전 4시 30 분이 백업을 실행하기에 가장 좋은 시간이므로 # 3 (백업 시간 변경)은 선택 사항이 아니며 2008 (# 4)로 업그레이드하는 것에 대해 이야기했지만 그럴 것이라고는 생각하지 않습니다. 언제든지.
Rachel

올바른 방향으로 안내하는 방법을 잘 모르는 경우 가상 머신에 다른 스토리지를 노출시킬 수 있습니까?
Aaron Bertrand

예, 다른 스토리지를 가상 머신에 노출시킬 수 있다고 생각합니다. "시스템의 나머지 I / O에서 백업 I / O 격리"라고 말하면 디스크 드라이브 대신 네트워크 드라이브로 백업하는 것을 의미합니까?
레이첼

3
아니요, 정기적 인 데이터베이스 및 tempdb 작업을 동시에 읽고 쓰는 디스크가 아닌 다른 I / O 하위 시스템에 백업하는 것을 의미 합니다. 동일한 서버의 다른 디스크 드라이브, 다른 컴퓨터의 공유, SAN의 다른 LUN, NAS의 공유 등일 수 있습니다.
Aaron Bertrand

단편 복원은 내가 생각하지 못한 훌륭한 솔루션입니다. 게시 해 주셔서 감사합니다!
Ali Razeghi

8

이것은 일반적인 문제이며 여러 솔루션이 있으며 실제로 환경에 따라 다릅니다. 그들을 통해 봅시다 :

1- 비행 중 백업 압축

2008 년 R1 Backup Compression은 Enterprise에서 사용할 수있게되었으며 2008R2에서는 Standard에서 사용할 수있게되었습니다. 이것은 거대하다. 많은 시간을 절약 할 수 있습니다. 업그레이드 할 수 있다면 갈 것입니다. 그렇게 할 수 없다면 RedGate의 HyperBak 유틸리티 또는 Quest LiteSpeed를 확인하십시오 . 둘 다 무료 평가판이 있습니다.

2- 전체 및 차등 백업

나는 2TB 제품 데이터베이스를 물려 받아 24/7 주요 인터넷 회사에서 많은 시간 초과를 일으켰습니다. 전체 및 차등 백업을 활성화하여 많은 시간을 절약했습니다. 활동이 적을 때는 일요일 오전 12시 전체 백업을하고 일주일 동안 혼란스러워합니다. 이것은 많은 공간을 절약했습니다. Diff는 변경된 데이터베이스 페이지에서 작동하므로 트랜잭션 로그와 다릅니다. 변경된 페이지가 백업됩니다. 따라서 전체 복원을 수행 한 다음 diff 복원을 수행하여 수정 된 페이지를 추가하십시오.

3- 병목 현상은 무엇입니까?

병목 현상 분석은 진단에 중요합니다. 데이터 파일과 동일한 디스크 어레이로 백업하고 있습니까? 데이터 파일이 페깅되고 있습니까? 백업 중 데이터 디스크에 대한 DISK SEC / READ 및 DISK SEC / WRITE는 무엇입니까? 4 개의 파일을 만들도록 백업을 수정했습니다. 각 파일에는 자체 스레드 작성기와 SAN에 훌륭하게 작동합니다. 테스트 해보면 백업 파일 4 개만 만들어 45 분을 단축했습니다. 위에 나열된 디스크 측정 항목이 부족한지 확인하십시오. 기준을 세우십시오.

4- 다른 서버로 복제 및 백업

이것은 약간 고급입니다. 복제 된 데이터베이스가 최신 상태인지 확인하고 이에 대한 적절한 모니터링이 필요합니다. 그렇다면 복제 된 데이터베이스 만 백업하면됩니다.


HyperBak을 앞두고 있기 때문에 2011 년 후반에 VLDB를 테스트했을 때 VLDB에 아무런 이익이 없었습니다. 나는 RedGate와 이야기를했으며 버그라고 언급 했으므로 지금은 해결 될 것입니다. 어쨌든 300GB가 VLDB로 간주되지는 않지만 예상대로 작동하지 않으면 조심하십시오.
Ali Razeghi

-1

다음 매개 변수를 사용할 수 있습니다.

블록 크기 크기-크기 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536을 선택하십시오 (KB).

버퍼 수 백업 조작에 사용될 총 I / O 버퍼 수를 지정합니다. 양의 정수를 지정할 수 있습니다. 그러나 Sqlservr.exe 프로세스의 가상 주소 공간이 충분하지 않기 때문에 버퍼 수가 많으면 "메모리 부족"오류가 발생할 수 있습니다. -MSDN에서

MAXTRNASFERSIZE -65536 바이트 (64KB) ~ 4194304 바이트 (4MB)


-3

시도 해봐. 큰 크기의 db 동안 시간 초과 만료 문제를 해결했습니다.

Private Sub Command1_Click()
On Error Resume Next
Dim con As New Connection
Dim tm As String
con.CommandTimeout = 500'''Command timeout should be 500


 With con
    .ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=dbiBMS;Data Source=192.168.103.4"
    .Open
 End With
 tm = CStr(Time)

con.Execute " backup database dbiBMS to disk='E:\Database_Backup\Test1.bak' with format "

con.Close
MsgBox tm
Exit Sub
x:
MsgBox Err.Description

End Sub

3
시간 초과를 500ms로 설정하면 시간 초과 만료 문제를 해결할 수 있다고 생각하지 않습니다.
vijayp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.