복제 문서 처리 순서 병합 이해

이 문서에서는 병합 복제 문서 처리 순서를 이해하는 방법을 소개합니다.

원래 제품 버전:   SQL Server
원래 KB 번호:   307356

요약

병합 에이전트는 동기화 프로세스 중에 병합 프로세스가 문서에 변경 내용을 적용하는 순서를 규정하는 특정 규칙 집합을 따릅니다.

이 문서에서는 문서 처리 순서가 중요한 이유에 대해 논의합니다.

자세한 정보

문서 처리 순서가 중요한 두 가지 주요 이유가 있습니다.

  • 대부분의 경우 병합 에이전트는 최적의 성능을 달성하기 위해 특정 순서로 DRI(선언적 참조 무결성) 제약 조건에 참여하는 문서의 변경 내용을 처리해야 합니다. 그렇지 않은 경우 병합 에이전트가 잘못된 순서로 시도한 DML(데이터 조작 언어) 작업을 다시 시도해야 할 수 있습니다.(즉, 부모보다 먼저 자식 행을 삽입하려고 시도).

  • 참조 무결성을 유지하기 위해 트리거를 사용하는 응용 프로그램에는 병합 에이전트가 특정 순서로 변경 내용을 보내야 합니다. 병합 에이전트가 변경 내용을 잘못된 순서로 보내는 경우 트리거는 변경 내용을 롤백할 가능성이 높고 복제 토폴로지 전체에 변경 내용이 전파되지 않습니다.

참고

병합 에이전트는 DML 변경 작업을 파트너 복제본에 적용하는 경우 FOREIGN KEY 제약 조건 평가 및 사용자 트리거 SQL 무시할 수 있습니다. 이 경우 FOREIGN KEY 제약 조건과 사용자 트리거 또는 둘 다를 복제용이 아닌 옵션으로 만들어야 합니다. 두 경우 모두 병합 프로세스에서는 SQL Server 사용자가 시작한 원래 변경을 실행할 때 비즈니스 논리가 성공적으로 평가된 것으로 가정하며, 파트너 복제본에 데이터를 복제할 때 이러한 조건을 다시 평가하지는 않는다고 가정합니다. 이러한 방식으로 복제에 NOT을 사용할 경우의 주요 이점은 성능이 향상됩니다. 복제에 적합하지 않은 옵션과 해당 옵션을 적절하게 사용하는 방법에 대한 자세한 내용은 SQL Server 온라인 온라인 책의 NOT FOR REPLICATION 옵션 항목을 참조하십시오.

앞에서 나열한 두 가지 이유로 인해 병합 에이전트가 파트너 복제본에 변경 내용을 전달하는 순서가 중요합니다.

문서 처리 순서에 대한 논의를 시작하기 전에 두 가지 주요 개념을 이해하는 것이 중요합니다. 두 가지 주요 개념은 다음과 같습니다.

  • 문서의 별명입니다.

  • 세대.

다음은 두 개념에 대한 설명입니다.

  • 문서 별명

    별명은 복제를 병합하기 위해 병합 에이전트가 문서(SQL Server 테이블)를 식별하는 데 사용하는 정수 값입니다. 병합 설치 프로세스에서는 병합 발행물에 문서를 추가할 때 문서 별명을 할당합니다. 문서가 DRI 제약 조건에 참여하는 경우 병합 설치 프로세스는 정의된 DRI 제약 조건을 반영하는 문서 별명을 생성합니다. 병합 프로세스에서는 FOREIGN KEY 제약 조건(부모)이 참조하는 테이블을 참조하는 테이블(자식 테이블 또는 FOREIGN KEY 제약 조건이 정의된 테이블)보다 작은 문서 별명을 할당합니다.

    테이블이 DRI 제약 조건에 참여하지 않는 경우 병합 설정 프로세스에서는 문서를 발행물에 추가하는 순서에 따라 문서의 애명을 오라클라이저 순서에 따라 할당합니다.

  • 생성

생성은 병합 에이전트가 특정 문서에 대한 논리적 변경 내용을 추적하는 데 사용하는 정수 값입니다. 병합 동기화 간의 특정 복제본에서 특정 문서에 대한 모든 변경 내용은 같은 생성과 연결됩니다. 병합 에이전트가 실행될 때마다 기존 열기 생성을 닫은 다음 다음 변경 내용 집합을 연결하기 위해 새 세대를 니다.

INSERTs, UPDAT 및 DELET 처리

병합 에이전트는 특정 발행물의 문서를 두 개의 고유한 그룹으로 분할합니다.

  • 병합 에이전트는 조인 필터 관계에 관련이 없는 문서를 DRI를 통해 관련되지 않은 문서를 조인 필터와 관련된 모든 문서에 한 그룹으로 넣습니다.

  • 병합 에이전트는 필터 조인 관계에 명시적으로 관련된 문서와 DRI를 통해 필터 문서에 참가하는 관련 문서를 두 번째 그룹으로 만듭니다.

병합 에이전트는 발행물에 정의된 각 문서를 이전 그룹 중 하나에만 추가합니다.

병합 에이전트는 그룹을 사용하여 , 및 발행물에 정의된 모든 문서의 전체 처리 UPDATEs INSERTs DELETEs 순서를 파악합니다.

두 개의 각 그룹에서 병합 에이전트는 문서 별명 순서와 내한 문서에서 별명 순서로 INSERTs UPDATEs DELETEs 처리됩니다. 먼저 병합 에이전트는 특정 그룹 전체를 처리하고 그 다음에(또한 특정 그룹에서) DELETEs UPDATEs INSERTs 처리합니다. 개념적으로 병합 에이전트는 앞서 언급한 두 그룹을 이전에 나열된 순서대로 서로에게 추가(병합되지 않은)합니다. 병합 에이전트는 먼저 첫 번째 그룹에 대한 처리를 시작한 다음 두 번째 그룹으로 처리를 확장하고 두 그룹에 대한 나머지 변경 내용은 병렬로 DELETEs DELETE 처리됩니다. 병합 에이전트는 각 그룹에서 문서 처리 순서를 유지 관리하기는 하지만 병합 에이전트는 두 그룹에서 문서 처리 순서를 엄격하게 유지하지 않습니다. 따라서 또는 의 경우 문서가 더 높은 첫 번째 그룹에서 변경된 내용이 더 낮은 별명을 사용하여 두 번째 그룹보다 먼저 도착할 INSERT UPDATE 수 있습니다. 의 경우도 반대로 발생할 수 DELETE 있습니다. 이러한 동작은 모두 디자인에 의해서만 나타 남습니다.

생성 일괄 처리가 문서 처리 순서에 대한 가능한 영향

앞에서 설명한 대로 세대를 사용하여 동기화 세션 간의 특정 복제본에서 특정 문서에 대해 발생하는 변경 내용( 및 )을 논리적으로 그룹화할 INSERTs UPDATEsDELETEs 있습니다. 궁극적으로 병합 에이전트는 두 복제 데이터베이스 간에 교환해야 하는 변경 내용을 결정할 때 세대와 함께 작동합니다. 병합 에이전트는 동기화 프로세스의 다음 지점에서 공통 세대를 협상합니다.

  • 구독자에서 게시자에게 변경 내용을 업로드하기 전에

  • 게시자에서 구독자에게 변경 내용을 다운로드하기 전에

병합 에이전트는 병합 동기화의 업로드 및 다운로드 단계에서 파트너 복제본에 전송할 세대를 열 수 있을 때 이러한 공통 생성을 시작점으로 활용합니다.

병합 에이전트는 생성 일괄 처리라고도 하는 일괄 처리로 생성을 처리합니다. 기본적으로 병합 에이전트가 구독자에서 게시자에게 업로드하거나 게시자의 구독자에게 다운로드하는 각 생성 일괄 처리에는 100세대가 포함됩니다. 생성 일괄 처리 크기는 및 에이전트 병합 매개 변수 또는 에이전트 병합 프로필을 통해 -UploadGenerationsPerBatch -DownloadGenerationsPerBatch 구성할 수 있습니다. 기본 경우 게시자(또는 다시 게시자)와 구독자 간에 교환(즉, 다운로드 및 업로드 또는 둘 다)해야 하는 세대가 100개가 넘는 경우 병합 에이전트는 여러 세대 일괄 처리를 처리합니다. 일괄 처리 수는 병합 에이전트가 교환해야 하는 생성 수와 특정 병합 세션에 대해 적용된 일괄 처리당 생성 수에 따라 달라 습니다.

여러 세대 일괄 처리가 교환되는 상황에서 병합 에이전트는 서로 다른 두 세대 일괄 처리로 관련 상위 및 자식 변경 내용을 분할할 수 있습니다. 이 경우 병합 에이전트는 연결된 부모 변경이 포함된 생성 일괄 처리보다 먼저 생성 일괄 처리의 자식 변경을 전달할 수 있습니다. 다시 게시자를 사용하는 계층적 병합 토폴로지에서는 생성 일괄 처리에서 부모 및 자식 변경 내용이 분할될 수 있는 드문 상황이 있습니다. 비 수렴형에 대한 자세한 내용은 다음 문서를 참조하세요.

개별 생성 일괄 SQL Server 자식 및 부모 세대를 처리할 때 수렴하지 않습니다.

생성 일괄 처리에서 부모 및 자식 변경이 분할되는 것을 방지하기 위해 앞서 설명한 및 매개 변수를 -UploadGenerationsPerBatch -DownloadGenerationsPerBatch 늘릴 수 있습니다.

문서 처리 순서는 앞서 설명한 규칙에 따라 특정 생성 일괄 처리에서 유지 관리됩니다. 그러나 병합 에이전트는 생성 일괄 처리에서 문서 처리 순서를 유지할 수 없습니다.