다음을 통해 공유


일반적인 복제 성능 향상

적용 대상: SQL Server Azure SQL Managed Instance

이 항목에 설명된 지침을 사용하여 애플리케이션 및 네트워크에서 모든 유형의 복제에 대한 일반적인 성능을 향상시킬 수 있습니다.

서버 및 네트워크

  • Microsoft SQL Server 데이터베이스 엔진에 할당될 최소 및 최대 메모리양을 설정합니다.

    기본적으로 데이터베이스 엔진은 사용 가능한 시스템 리소스에 따라 메모리 요구 사항을 동적으로 변경합니다. 복제 작업 중 사용 가능한 메모리의 부족을 방지하기 위해 min server memory 옵션을 사용해서 사용 가능한 최소 메모리를 설정합니다. 운영 체제 페이지가 메모리용 디스크에 없도록 하려면 최대 서버 메모리 옵션을 사용하여 최대 메모리 양을 설정할 수도 있습니다. 자세한 내용은 서버 메모리 구성 옵션을 참조하세요.

  • 데이터베이스 데이터 파일 및 로그 파일이 적절히 할당되었는지 확인합니다. 복제와 관련된 모든 데이터베이스에 대해 트랜잭션 로그를 위한 별도의 디스크 드라이브를 사용합니다.

    데이터베이스를 저장하는 데 사용되는 것과 다른 디스크 드라이브에 로그 파일을 저장하여 트랜잭션을 작성하는 데 걸리는 시간을 줄일 수 있습니다. 내결함성이 필요하다면 RAID(Redundant Array of Inexpensive Disks)-1을 사용하여 이 드라이브를 미러링할 수 있습니다. 다른 데이터베이스 파일에 대한 RAID 0 또는 0+1(내결함성 요구 사항에 따라 다름)을 사용합니다. 이는 복제 사용 여부에 관계없이 좋은 방법입니다.

  • 복제에 사용하는 서버, 특히 배포자에 메모리를 추가해 봅니다.

  • 다중 프로세서 컴퓨터를 사용합니다.

    복제 에이전트는 서버의 추가 프로세서를 활용할 수 있습니다. 높은 CPU 사용량으로 실행하는 경우 더 빠른 CPU 또는 여러 CPU를 설치하는 것이 좋습니다.

  • 빠른 네트워크를 사용합니다.

    트랜잭션 복제의 경우 특히 네트워크로 인해 심각한 성능 병목 상태가 발생할 수 있습니다. 100Mbps(초당 메가비트) 이상의 빠른 네트워크를 사용하여 구독자에 대한 변경 내용 전파를 크게 향상시킬 수 있습니다. 네트워크가 느린 경우 적절한 네트워크 설정 및 에이전트 매개 변수를 지정합니다.

데이터베이스 디자인

  • 데이터베이스 디자인에 대한 모범 사례를 따릅니다.

    일반적으로 복제된 데이터베이스에 대한 성능 최적화의 영향은 복제되지 않은 데이터베이스에 대한 성능 최적화의 영향과 거의 동일합니다. 그러나 인덱스는 구독자에서 주의해서 사용해야 합니다. 구독자의 기본 키 열을 인덱싱해야 하지만 추가 인덱스는 삽입, 업데이트 및 삭제 성능에 영향을 줄 수 있습니다.

  • READ_COMMITTED_SNAPSHOT 데이터베이스 옵션을 설정하는 것이 좋습니다.

    사용자 활동과 복제 에이전트 활동 간의 경합을 줄이려면 게시 및 구독 데이터베이스에 대해 다음 옵션을 설정합니다.

    ALTER DATABASE AdventureWorks  
    SET READ_COMMITTED_SNAPSHOT ON  
    

    자세한 내용은 ALTER DATABASE(Transact-SQL)를 참조하세요.

  • 트리거의 애플리케이션 논리에 유의합니다.

    구독자의 사용자 정의 트리거에 있는 비즈니스 논리로 인해 구독자에 대한 변경 내용 복제의 속도가 느려질 수 있습니다.

    트리거를 사용하여 병합 복제에 대해 게시된 테이블에서 참조 무결성을 유지하는 경우 테이블의 처리 순서를 지정하여 병합 에이전트에 필요한 재시도 횟수를 줄입니다. 자세한 내용은 병합 복제 옵션 지정을 참조하세요.

  • LOB(Large Object) 데이터 형식의 사용을 제한합니다.

    LOB에는 다른 열 데이터 형식보다 더 많은 저장소 공간과 처리가 필요합니다. 애플리케이션에 필요한 경우가 아니면 문서에 이러한 열을 포함하지 마세요. text, ntextimage 데이터 형식은 더 이상 사용되지 않습니다. LOB를 포함시킬 경우 데이터 형식 varchar(max), nvarchar(max), varbinary(max)를 각각 사용하는 것이 좋습니다.

    트랜잭션 복제의 경우 OLEDB 스트리밍에 대한 배포 프로필이라고 하는 배포 에이전트 프로필을 사용해 보십시오. 자세한 내용은 복제 에이전트 프로필을 참조하세요.

게시 디자인

  • 필요한 데이터만 게시합니다.

    복제를 쉽게 설정할 수 있으므로 실제로 필요한 것보다 더 많은 데이터를 게시하는 경향이 있습니다. 이렇게 하면 배포 데이터베이스 및 스냅샷 파일 내에서 추가 리소스를 사용할 수 있으며 필요한 데이터의 처리량을 줄일 수 있습니다. 불필요한 테이블 게시를 피하고 게시 업데이트 빈도를 줄일 것을 고려합니다.

  • 게시 디자인 및 애플리케이션 동작을 통해 충돌을 최소화합니다.

    구독자에서 데이터를 변경할 수 있는 복제 유형에는 병합 복제, 업데이트할 수 있는 구독이 있는 트랜잭션 복제 및 피어 투 피어 트랜잭션 복제가 있습니다. 동기화 간에 지정된 행이 둘 이상의 노드에서 업데이트되는 경우 업데이트 가능한 구독을 사용한 병합 복제 및 트랜잭션 복제는 데이터 충돌을 지원합니다. 피어 투 피어 복제는 데이터 충돌을 지원하지 않습니다. 데이터 변경 내용을 분할해야 합니다. 사용된 복제 유형에 관계없이 가능하면 변경 내용을 분할하는 것이 좋습니다. 이렇게 하면 충돌 감지 및 해결 과정이 간단해집니다.

    각 구독자에 데이터의 하위 집합을 게시하거나 지정된 행에 대한 애플리케이션 직접 변경 내용을 지정된 노드에 적용해 변경 내용을 분할할 수 있습니다.

    • 병합 복제는 단일 게시와 함께 매개 변수가 있는 필터를 사용하여 데이터의 하위 집합을 게시할 수 있습니다. 자세한 내용은 매개 변수가 있는 행 필터를 참조하십시오.

    • 트랜잭션 복제에서는 여러 게시에서 정적 필터를 사용하여 데이터 하위 집합을 게시할 수 있습니다. 자세한 내용은 게시된 데이터 필터링을 참조하세요.

  • 행 필터를 신중하게 사용합니다.

    트랜잭션 게시에 행 필터를 사용하는 아티클이 하나 이상 포함된 경우 로그 판독기 에이전트는 트랜잭션 로그를 검사할 때 테이블 업데이트의 영향을 받는 각 행에 필터를 적용해야 합니다. 따라서 로그 판독기 에이전트의 처리량이 영향을 받습니다.

    마찬가지로 병합 복제는 변경되거나 삭제된 행을 평가하여 해당 행을 받아야 하는 구독자를 결정해야 합니다. 구독자에 필요한 데이터를 줄이기 위해 행 필터를 사용하는 경우 이러한 처리는 더 복잡하며 테이블의 모든 행을 게시할 때보다 느려질 수 있습니다. 각 구독자에서 스토리지 요구 사항 감소와 최대 처리량을 달성해야 하는 필요성 간의 균형을 신중하게 고려합니다. 필터링에 대한 자세한 내용은 게시된 데이터 필터링을 참조하세요.

구독 고려 사항

  • 구독자가 많은 경우 끌어오기 구독을 사용합니다.

    배포 에이전트와 병합 에이전트는 밀어넣기 구독을 위한 배포자에서 실행되거나 끌어오기 구독을 위한 구독자에서 실행됩니다. 끌어오기 구독을 사용하면 에이전트 처리를 배포자에서 구독자로 이동하여 성능을 향상시킬 수 있습니다. 자세한 내용은 게시 구독을 참조하세요.

  • 구독자가 너무 오래된 경우 구독을 다시 초기화합니다.

    많은 양의 변경 내용을 구독자에게 보내야 하는 경우 새 스냅샷으로 다시 초기화하면 복제를 사용하여 개별 변경 내용을 이동하는 것보다 더 빠를 수 있습니다. 자세한 내용은 구독 다시 초기화를 참조하세요.

    트랜잭션 복제의 경우 복제 모니터는 배포되지 않은 명령 탭에 구독자에 아직 배포되지 않은 배포 데이터베이스의 트랜잭션 수와 이러한 트랜잭션에 예상되는 배포 시간에 대한 정보를 표시합니다. 자세한 내용은 복제 모니터를 사용하여 정보 보기 및 태스크 수행을 참조하세요.

스냅샷 고려 사항

  • 필요한 경우에만 사용량이 많지 않은 시간에 스냅샷 에이전트를 실행합니다.

    스냅샷 에이전트는 게시자에 있는 게시된 테이블의 데이터를 배포자에 있는 스냅샷 폴더의 파일에 대량 복사합니다. 스냅샷 생성은 리소스를 많이 사용하는 프로세스일 수 있으며 사용량이 많지 않은 시간 동안 예약하는 것이 가장 좋습니다.

  • 문자 모드 스냅샷이 필요하지 않은 경우 기본 모드 스냅샷을 사용합니다.

    문자 모드 스냅샷이 필요한 SQL Server 이외 구독자 및 SQL Server Compact를 실행하는 구독자를 제외한 모든 구독자에 대해 기본 모드 스냅샷을 사용합니다.

  • 게시에 단일 스냅샷 폴더를 사용합니다.

    스냅샷 위치와 관련된 게시 속성을 지정하는 경우 기본 스냅샷 폴더, 대체 스냅샷 폴더 또는 두 폴더 모두에 스냅샷 파일을 생성하도록 선택할 수 있습니다. 두 위치에서 스냅샷 파일을 생성하려면 스냅샷 에이전트가 실행될 때 추가 디스크 공간과 더 많은 처리가 필요합니다.

  • 데이터베이스 또는 로그 파일 저장에 사용되지 않는 배포자의 로컬 드라이브에 스냅샷 폴더를 둡니다.

    스냅샷 에이전트는 스냅샷 폴더에 데이터를 순차 쓰기합니다. 스냅샷 폴더를 데이터베이스 또는 로그 파일과 별도의 드라이브에 배치하면 디스크 간의 경합이 줄어들고 스냅샷 프로세스가 더 빠르게 완료됩니다.

  • 구독자에서 구독 데이터베이스를 만들 때 단순 복구 모델 또는 대량 로그된 복구 모델을 지정하는 것이 좋습니다. 이렇게 하면 구독자에서 스냅샷을 적용하는 동안 수행되는 대량 삽입을 최소 로깅으로 할 수 있습니다. 스냅샷이 구독 데이터베이스에 적용된 후 필요에 따라 다른 복구 모델로 변경할 수 있습니다. 복제된 데이터베이스는 모든 복구 모델을 사용할 수 있습니다. 복구 모델 선택에 대한 자세한 내용은 복원 및 복구 개요(SQL Server)를 참조하세요.

  • 대역폭이 낮은 네트워크에 대해 이동식 미디어에서 대체 스냅샷 폴더 및 압축 스냅샷을 사용하는 것이 좋습니다.

    대체 스냅샷 폴더에서 스냅샷 파일을 압축하면 스냅샷 디스크 스토리지 요구 사항을 줄이고 이동식 미디어에서 스냅샷 파일을 보다 쉽게 전송할 수 있습니다.

    스냅샷을 압축하면 네트워크에서의 스냅샷 파일 전송 성능이 향상되는 경우도 있습니다. 그러나 스냅샷을 압축하려면 스냅샷 파일을 생성할 때 스냅샷 에이전트가 추가 처리를 해야 하고, 스냅샷 파일을 적용할 때 배포 에이전트 또는 병합 에이전트가 추가 처리를 해야 합니다. 이 경우 스냅샷 생성 속도가 느려지거나 스냅샷 적용 시간이 늘어날 수 있습니다. 또한 네트워크 오류가 발생하는 경우 압축 스냅샷을 다시 시작하지 못할 수도 있습니다. 따라서 신뢰할 수 없는 네트워크에는 적합하지 않습니다. 네트워크를 통해 압축 스냅샷을 사용할 때는 이러한 장단점을 신중하게 고려해야 합니다. 자세한 내용은 스냅샷 옵션 수정을 참조하세요.

  • 구독을 수동으로 초기화해 봅니다.

    대규모 초기 데이터 세트가 포함된 시나리오 같은 일부 시나리오에서는 스냅샷 이외의 메서드를 사용하여 구독을 초기화하는 것이 좋습니다. 자세한 내용은 스냅샷 없이 트랜잭션 구독 초기화를 참조하세요.

에이전트 매개 변수

  • 초기 테스트, 모니터링 또는 디버깅 중일 때를 제외하고 복제 에이전트의 정보 표시 수준을 줄입니다.

    –HistoryVerboseLevel 매개 변수 및 배포 에이전트 또는 병합 에이전트의 –OutputVerboseLevel 매개 변수를 줄입니다. 이렇게 하면 추적 에이전트 기록 및 출력에 삽입되는 새 행의 수가 줄어듭니다. 대신 상태가 동일한 이전 기록 메시지가 새 기록 정보로 업데이트됩니다. 에이전트 작업에 대한 정보를 최대한 많이 가질 수 있도록 테스트, 모니터링 및 디버깅의 정보 표시 수준을 늘립니다.

  • 스냅샷 에이전트, 병합 에이전트 및 배포 에이전트의 –MaxBCPThreads 매개 변수를 사용합니다(지정된 스레드 수가 컴퓨터의 프로세서 수를 초과해서는 안 됩니다). 이 매개 변수는 스냅샷을 만들고 적용할 때 병렬로 수행할 수 있는 대량 복사 작업의 수를 지정합니다.

  • 배포 에이전트와 병합 에이전트의 –UseInprocLoader 매개 변수를 사용합니다. 게시된 테이블에 XML 열이 있는 경우 이 매개 변수를 사용할 수 없습니다. 이 매개 변수는 스냅샷이 적용될 때 에이전트가 BULK INSERT 명령을 사용하도록 합니다.

에이전트 매개 변수는 에이전트 프로필 및 명령줄에서 지정할 수 있습니다. 자세한 내용은 다음을 참조하세요.