'Restore'에 해당되는 글 1건

  1. 2008.01.22 Backup, Restore 의 MAXTRANSFERSIZE로 인한 성능 (3)

SQL Server 기본적으로 제공하는 백업, 복구 조금 느린감이 없지 않습니다.

느린 이유중의 가장 큰 원인은 IOSubsystem에서의 병목이 대부분입니다.
보통 이러한 문제는 초당 전송되는 양 보다 IO 요청 수로 인해 성능적 문제가 발생하고 있습니다. 보다 많은 데이터를 빠르게 이동하기 위해서는 보다 큰 블록을 사용하여 전송한다면 보다 많은 데이터를 빠르게 옮길 수 있습니다. (일반적인  내용입니다. 모든 시스템에 이와 같은 문제가 발생하는 것은 아님)

이러한 문제로 인해 대용량의 데이터를 빠르게 복구 및 백업을 하기 위해서 하드웨어에서 제공하는 백업 및 snap등의 솔루션등을 사용하고 있습니다.

하지만, 이것도 돈이 많이 드는 솔루션이라 쉽게 도입하기는 쉽지 않습니다.
그럼, SQL Server 2008에서 압축 백업, 복원을 기능을 사용한다면?
분명 지금보다 빠르지만, 현재 SQL Server 2000, 2005에서 할 수 있는 방법은?

2005 BOL 에서 Backup, Restore 부분을 보시면 MAXTRANSFERSIZE를 설정 할 수 있습니다.(SQL Server 2000 도 가능)

MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }
SQL Server와 백업 미디어 간에 사용되는 가장 큰 전송 단위(바이트)를 지정합니다. 가능한 값은 최대 4194304바이트(4MB)까지 65536바이트(64KB)의 배수입니다.

이 옵션은 아래와 같이 memtoleave의 조각화로 인한 오류 발생시 작은 블록으로 전송하여 문제를 해결 할 수 도 있습니다.
Downgrading backup buffers from 960K to 64K

이 옵션은 기본값은 1MB이며, 최대 4MB 설정 할 수 있습니다.
해당 수치를 명시적으로 사용한다고 하더라도 받듯이 설정된 크기로 전송 하지는 않습니다.
주의해야 할 사항은 백업 및 복구는 Memtoleave 영역의 메모리를 사용하며 최소 블록 단위보다 큰 연속된 메모리 공간이 필요합니다.
Memtoleave 가 많이 조각화난 상태인 32bit환경에서는 4MB설정 후 작업시 오류가 발생 할 수 있습니다.
보다 많은 Memtoleave 영역을 가지고 있는 64bit 환경 및 조각화 상태가 적은 32bit 환경이라면, 테스트 할 가치가 충분히 있을 것이라 생각됩니다.

<
4MB, 1MB 백업 테스트>



송 혁, SQL Server MVP
sqler.pe.kr
nexondbteam.tistory.com

Posted by 송혁 - HyokSong

댓글을 달아 주세요

  1. 안보갑 2008.01.23 17:20 신고  댓글주소  수정/삭제  댓글쓰기

    흠... Block Size 도 백업에 영향을 미칠까 싶어서 같이 테스트해 보았는데 테스트 결과가 이상하게 나와서 좀더 확인이 필요할듯 하네요~ 좀더 테스트해보고 리포팅하죠~

  2. 안보갑 2008.01.27 17:57 신고  댓글주소  수정/삭제  댓글쓰기

    테스트 결과 공유합니다.

    backup database BackupTest to disk = 'E:\BackupTest.bak'
    BACKUP DATABASE이(가) 3502721개의 페이지를 443.771초 동안 처리했습니다(64.660MB/초).

    backup database BackupTest to disk = 'E:\BackupTest1.bak' with maxtransfersize = 4194304
    BACKUP DATABASE이(가) 3502721개의 페이지를 325.835초 동안 처리했습니다(88.063MB/초).

    backup database BackupTest to disk = 'E:\BackupTest4.bak' with blocksize = 65536
    BACKUP DATABASE이(가) 3502721개의 페이지를 437.349초 동안 처리했습니다(65.609MB/초).

    backup database BackupTest to disk = 'E:\BackupTest4.bak' with blocksize = 65536, maxtransfersize = 4194304
    BACKUP DATABASE이(가) 3502721개의 페이지를 323.509초 동안 처리했습니다(88.697MB/초).

    backup database BackupTest to disk = 'E:\BackupTest4.bak' with blocksize = 8192, maxtransfersize = 4194304
    BACKUP DATABASE이(가) 3502721개의 페이지를 298.779초 동안 처리했습니다(96.038MB/초).

    backup database BackupTest to disk = 'E:\BackupTest4.bak' with blocksize = 4096, maxtransfersize = 4194304
    BACKUP DATABASE이(가) 3502721개의 페이지를 295.207초 동안 처리했습니다(97.200MB/초).

    backup database BackupTest to disk = 'E:\BackupTest4.bak' with blocksize = 2048, maxtransfersize = 4194304
    BACKUP DATABASE이(가) 3502721개의 페이지를 294.538초 동안 처리했습니다(97.421MB/초).

  3. 안보갑 2008.01.27 17:57 신고  댓글주소  수정/삭제  댓글쓰기

    blocksize를 8K, 4K, 2K로 설정하면 maxtransfersize만 설정한것 보다는 10% 정도의 성능향상이 있어 보이네요~