일반적인 복제 성능 향상

적용 대상:SQL ServerAzure SQL Managed Instance

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

서버 및 네트워크

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

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

  • 데이터베이스 데이터 파일 및 로그 파일의 적절한 할당을 확인합니다. 복제본(replica) 관련된 모든 데이터베이스에 대해 트랜잭션 로그에 별도의 디스크 드라이브를 사용합니다.

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

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

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

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

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

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

데이터베이스 디자인

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

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

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

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

    ALTER DATABASE AdventureWorks  
    SET READ_COMMITTED_SNAPSHOT ON  
    

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

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

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

    • 트랜잭션 복제본(replica) 경우 이 논리를 복제본(replica)ted 명령을 적용하는 데 사용되는 사용자 지정 저장 프로시저에 포함하는 것이 더 효율적일 수 있습니다. 자세한 내용은 트랜잭션 아티클에 대한 변경 내용을 전파하는 방법 지정을 참조하세요.

    • 병합 복제본(replica) 경우 비즈니스 논리 처리기를 사용하는 것이 더 효율적일 수 있습니다. 자세한 내용은 병합 동기화 중에 비즈니스 논리 실행을 참조 하세요.

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

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

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

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

발행물 디자인

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

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

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

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

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

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

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

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

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

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

구독 고려 사항

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

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

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

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

    트랜잭션 복제본(replica) 복제 모니터는 배포 데이터베이스에서 아직 구독자에게 배포되지 않은 트랜잭션 수 및 이러한 트랜잭션을 배포하기 위한 예상 시간에 대한 배포되지 않은 명령 탭 정보를 표시합니다. 자세한 내용은 복제 모니터사용하여 정보 보기 및 작업 수행을 참조하세요.

스냅샷 고려 사항

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

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

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

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

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

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

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

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

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

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

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

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

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

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

에이전트 매개 변수

  • 초기 테스트, 모니터링 또는 디버깅을 제외하고 복제본(replica) 에이전트의 자세한 수준을 줄입니다.

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

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

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

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