병합 복제 성능 향상

적용 대상:SQL Server

일반 복제 성능 향상에 설명된 일반적인 성능 팁을 고려한 후 병합 복제본(replica) 관련 추가 영역을 고려합니다.

데이터베이스 디자인

  • 행 필터 및 조인 필터에 사용되는 인덱스 열입니다.

    게시된 아티클에 행 필터를 사용하는 경우 필터의 WHERE 절에 사용되는 각 열에 인덱스를 만듭니다. 인덱스가 없으면 Microsoft SQL Server는 테이블의 각 행을 읽어 행을 파티션에 포함해야 하는지 여부를 결정해야 합니다. 인덱스를 사용하면 SQL Server에서 포함할 행을 빠르게 찾을 수 있습니다. 가장 빠른 처리는 복제본(replica)tion이 인덱스에서만 필터의 WHERE 절을 완전히 확인할 수 있는 경우 발생합니다.

    조인 필터에 사용되는 모든 열을 인덱싱하는 것도 중요합니다. 병합 에이전트는 실행될 때마다 기본 테이블의 어떤 열과 관련 테이블의 어떤 열을 파티션에 포함할 것인지를 결정하기 위해 부모 테이블을 검색합니다. 조인된 열에 인덱스를 만들면 병합 에이전트 실행될 때마다 SQL Server가 테이블의 각 행을 읽지 않아도 됩니다.

    필터링에 대한 자세한 내용은 병합 복제에 대해 게시된 데이터 필터링을 참조 하세요.

  • LOB(Large Object) 데이터 형식을 포함하는 테이블을 과도하게 정규화하는 것이 좋습니다.

    동기화가 발생할 때 병합 에이전트는 게시자 또는 구독자에서 전체 데이터 행을 읽고 전송해야 합니다. 행에 LOB를 사용하는 열이 포함된 경우 이 프로세스에는 추가 메모리 할당이 필요하고 이러한 열이 업데이트되지 않았더라도 성능에 부정적인 영향을 줄 수 있습니다. 이렇게 성능에 미칠 영향을 줄이려면 나머지 행 데이터에 대해 일 대 일 관계를 사용하여 LOB 열을 별개의 테이블에 두도록 합니다. 데이터 형식 텍스트, ntext이미지는 더 이상 사용되지 않습니다. LOB를 포함시킬 경우 데이터 형식 varchar(max), nvarchar(max), varbinary(max)를 각각 사용하는 것이 좋습니다.

발행물 디자인

  • 게시 호환성 수준 90RTM(SQL Server 2005(9.x) 이상 버전)을 사용합니다.

    하나 이상의 구독자가 다른 버전의 SQL Server를 사용하지 않는 한, 게시에서 SQL Server 2005(9.x) 이상 버전만 지원해야 한다고 지정합니다. 이렇게 하면 게시에서 새로운 기능 및 성능 최적화를 활용할 수 있습니다.

  • 적절한 게시 보존 설정을 사용합니다.

    구독을 동기화해야 하는 최대 시간인 게시 보존 기간은 추적 메타데이터가 저장되는 기간을 결정합니다. 높은 값은 스토리지 및 처리 성능에 영향을 줄 수 있습니다. 게시 보존 기간을 설정하는 방법은 Subscription Expiration and Deactivation를 참조하십시오.

  • 게시자에서만 변경된 해당 테이블에서 다운로드 전용 문서를 사용합니다. 자세한 내용은 다운로드 전용 아티클로 병합 복제 성능 최적화를 참조하세요.

필터 디자인 및 사용

  • 행 필터 절의 복잡성을 제한합니다.

    필터링 조건의 복잡성을 제한하면 병합 에이전트 구독자에게 보낼 행 변경 내용을 평가할 때 성능이 향상됩니다. 병합 행 필터 절 내에서 하위 선택을 사용하지 않습니다. 대신 다른 테이블의 행 필터 절을 기반으로 하는 한 테이블에서 데이터를 보다 효율적으로 분할할 수 있는 조인 필터의 사용을 고려합니다. 필터링에 대한 자세한 내용은 병합 복제에 대해 게시된 데이터 필터링을 참조 하세요.

  • 매개 변수가 있는 필터와 함께 미리 계산된 파티션을 사용합니다(이 기능은 기본적으로 사용됨). 자세한 내용은 미리 계산된 파티션을 사용하여 매개 변수가 있는 필터 성능 최적화를 참조 하세요.

    미리 계산된 파티션은 필터링 동작에 많은 제한을 적용합니다. 애플리케이션이 이러한 제한을 준수할 수 없는 경우 성능 이점을 제공하는 keep_partition_changes 옵션을 True로 설정합니다. 자세한 내용은 매개 변수가 있는 행 필터를 참조하십시오.

  • 데이터가 필터링되었지만 사용자 간에 공유되지 않는 경우 매핑되지 않는 파티션을 사용합니다.

    복제는 파티션 또는 구독 간에 공유되지 않는 데이터의 성능을 최적화할 수 있습니다. 자세한 내용은 매개 변수가 있는 행 필터를 참조하십시오.

  • 복잡한 조인 필터 계층을 만들지 마세요.

    5개 이상의 테이블이 있는 조인 필터는 병합 처리 중 성능에 큰 영향을 미칠 수 있습니다. 5개 이상의 테이블을 가진 조인 필터를 생성하는 경우 다른 해결책을 고려하는 것이 좋습니다.

    • 주로 조회 테이블, 작은 테이블 및 변경이 필요하지 않은 테이블로 구성된 테이블은 필터링하지 않습니다. 이러한 테이블을 게시의 일부로 만듭니다. 구독자 간에 분할되어야 하는 테이블 사이에만 조인 필터를 사용하는 것이 좋습니다. 자세한 내용은 Join Filters를 참조하세요.

    • 조인에 테이블이 많은 경우 데이터베이스 디자인을 비정규화하거나 매핑 테이블을 사용하는 것이 좋습니다. 예를 들어 영업 담당자가 고객에 대한 데이터만 필요하지만 고객을 영업 사원과 연결하기 위해 6개의 조인이 필요한 경우 영업 사원을 식별하는 열을 고객 테이블에 추가하는 것이 좋습니다. 영업 사원 데이터는 중복되지만 테이블을 비정규화하는 비용은 복제본(replica)tion 분할의 성능 이점보다 클 수 있습니다.

    • 일괄 처리에 많은 데이터 변경 내용이 포함된 경우 사전 계산된 파티션의 성능을 향상시키려면 주의하여 애플리케이션을 디자인합니다. 자식 테이블의 해당 변경 내용을 적용하기 전에 조인 필터에서 부모 테이블의 데이터를 변경해야 합니다.

  • 논리가 허용하는 경우 join_unique_key 옵션을 1 로 설정합니다.

    이 매개 변수를 1설정하면 조인 필터에서 자식 테이블과 부모 테이블 간의 관계가 일대일 또는 다 대 다임을 나타냅니다. 고유성을 보장하는 자식 테이블의 조인 열에 제약 조건이 있는 경우에만 이 매개 변수를 1 로 설정합니다. 매개 변수를 1잘못 설정하면 데이터의 비수렴이 발생할 수 있습니다. 자세한 내용은 Join Filters를 참조하세요.

  • 사전 계산 파티션을 사용하는 경우 많은 변경 사항이 있는 일괄 처리를 실행하지 않도록 합니다.

    많은 데이터 변경 사항이 있는 일괄 처리를 실행한 후 병합 에이전트를 실행하면 이 에이전트에서 큰 일괄 처리를 여러 개의 작은 일괄 처리로 나눕니다. 이 시간 동안 다른 병합 에이전트 프로세스가 차단될 수 있습니다. 일괄 처리의 변경 횟수를 줄이고 일괄 처리 간에 병합 에이전트 실행하는 것이 좋습니다. 이 작업을 수행할 수 없는 경우 게시에 대한 generation_leveling_threshold 값을 늘입니다.

구독 고려 사항

  • 구독 동기화 일정을 엇갈리고 있습니다.

    많은 수의 구독자가 게시자와 동기화되는 경우 병합 에이전트 서로 다른 시간에 실행되도록 일정을 크게 늘리는 것이 좋습니다. 자세한 내용은 Specify Synchronization Schedules을 참조하세요.

병합 에이전트 매개 변수

병합 에이전트 및 해당 매개 변수에 대한 자세한 내용은 복제 병합 에이전트 참조하세요.

  • 끌어오기 구독의 모든 구독자를 SQL Server 2005(9.x) 이상 버전으로 업그레이드합니다.

    구독자를 SQL Server 2005(9.x) 이상 버전으로 업그레이드하면 해당 구독자의 구독에서 사용하는 병합 에이전트 업그레이드됩니다. 많은 새로운 기능과 성능 최적화를 활용하려면 SQL Server 2005(9.x) 이상 버전의 병합 에이전트 필요합니다.

  • 구독이 빠른 연결을 통해 동기화되고 게시자에서 구독자로 변경 내용이 전송되면 병합 에이전트에 대해 –ParallelUploadDownload 매개 변수를 사용합니다.

    SQL Server 2005(9.x)에는 새로운 병합 에이전트 매개 변수인 –ParallelUploadDownload가 도입되었습니다. 이 매개 변수를 설정하면 병합 에이전트 게시자에 업로드된 변경 내용과 구독자에 다운로드된 변경 내용을 병렬로 처리할 수 있습니다. 이는 네트워크 대역폭이 높은 대용량 환경에서 유용합니다. 에이전트 매개 변수는 에이전트 프로필 및 명령줄에서 지정할 수 있습니다. 자세한 내용은 다음을 참조하세요.

  • 특히 동기화에 구독자에 대한 다운로드보다 구독자에서 업로드가 더 많은 경우 -MakeGenerationInterval 매개 변수의 값을 늘리는 것이 좋습니다.

  • LOB 열이 있는 행과 같은 많은 양의 데이터와 데이터 행을 동기화하는 경우 웹 동기화에 추가 메모리 할당이 필요하고 성능이 저하될 수 있습니다. 병합 에이전트에서 대량의 데이터가 있는 데이터 행을 너무 많이 포함한 XML 메시지를 생성하는 경우 이러한 현상이 발생합니다. 병합 에이전트 웹 동기화 중에 너무 많은 리소스를 사용하는 경우 다음 방법 중 하나로 단일 메시지로 전송되는 행 수를 줄입니다.

    • 병합 에이전트 느린 링크 에이전트 프로필을 사용합니다. 자세한 내용은 복제 에이전트 프로필을 참조 하세요.

    • 병합 에이전트 대한 -DownloadGenerationsPerBatch-UploadGenerationsPerBatch 매개 변수를 10 이하 값으로 줄입니다. 이러한 매개 변수의 기본값은 50입니다.

스냅샷 고려 사항

  • 초기 스냅샷을 생성하기 전에 대형 테이블에 ROWGUIDCOL 열을 만듭니다.

    병합 복제본(replica)에는 게시된 각 테이블에 ROWGUIDCOL 열이 있어야 합니다. 스냅샷 에이전트 초기 스냅샷 파일을 만들기 전에 ROWGUIDCOL 열이 테이블에 없는 경우 에이전트는 먼저 ROWGUIDCOL 열을 추가하고 채워야 합니다. 병합 복제본(replica) 중에 스냅샷 생성할 때 성능 이점을 얻으려면 게시하기 전에 각 테이블에 ROWGUIDCOL 열을 만듭니다. 열에는 이름이 있을 수 있지만(rowguid는 기본적으로 스냅샷 에이전트 사용됨) 다음과 같은 데이터 형식 특성이 있어야 합니다.

    • UNIQUEIDENTIFIER의 데이터 형식입니다.

    • NEWSEQUENTIALID() 또는 NEWID()의 기본값입니다. 변경 내용을 만들고 추적할 때 성능이 향상될 수 있으므로 NEWSEQUENTIALID()를 사용하는 것이 좋습니다.

    • ROWGUIDCOL 속성 집합입니다.

    • 열에 있는 고유 인덱스

  • 스냅샷 미리 생성하거나 구독자가 처음 동기화할 때 스냅샷 생성 및 애플리케이션을 요청할 수 있습니다.

    이러한 옵션 중 하나 또는 둘 다를 사용하여 매개 변수가 있는 필터를 사용하는 게시에 대한 스냅샷 제공합니다. 이러한 옵션 중 하나를 지정하지 않으면 bcp 유틸리티를 사용하는 대신 일련의 SELECT 및 INSERT 문을 사용하여 구독이 초기화됩니다. 이 프로세스는 훨씬 느립니다. 자세한 내용은 매개 변수가 있는 필터를 사용하여 병합 게시에 대한 스냅샷을 참조 하세요.

유지 관리 및 모니터링 고려 사항

  • 경우에 따라 병합 복제본(replica)tion 시스템 테이블을 다시 인덱싱합니다.

    병합 복제본(replica)에 대한 기본 테넌스의 일부로 MSmerge_contents, MSmerge_genhistory 및 MSmerge_tombstone, MSmerge_current_partition_mappings MSmerge_past_partition_mappings 병합 복제본(replica) 연결된 시스템 테이블의 증가를 검사. 이러한 테이블의 인덱스를 주기적으로 다시 만듭니다. 자세한 내용은 인덱스 다시 구성 및 다시 작성을 참조하세요.

  • 복제 모니터의 동기화 기록 탭을 사용하여 동기화 성능을 모니터링합니다.

    병합 복제의 경우 복제 모니터는 각 처리 단계(변경 내용 업로드, 변경 내용 다운로드 등)에 소요된 시간을 포함하여 동기화 중에 처리된 각 아티클에 대한 자세한 통계를 동기화 기록 탭에 표시합니다. 속도가 느려지는 특정 테이블을 파악하는 데 도움이 되며 병합 구독의 성능 문제를 해결하는 가장 좋은 장소입니다. 자세한 통계를 보는 방법에 대한 자세한 내용은 복제 모니터를 사용하여 정보 보기 및 작업 수행을 참조하세요.