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

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

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

요약

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

이 문서에서는 문서 처리 순서가 중요한 이유를 설명합니다.

추가 정보

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

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

  • 트리거를 사용하여 참조 무결성을 유지하는 애플리케이션은 병합 에이전트 특정 순서로 변경 내용을 보내야 합니다. 병합 에이전트 잘못된 순서로 변경 내용을 보내는 경우 트리거는 변경 내용을 롤백할 가능성이 높으며 변경 내용이 복제 토폴로지 전체에 전파되지 않습니다.

참고

이 병합 에이전트 파트너 복제본(replica) SQL DML 변경 작업을 적용할 때 FOREIGN KEY 제약 조건 평가 및 사용자 트리거 실행을 무시할 수 있습니다. 이렇게 하려면 FOREIGN KEY 제약 조건과 사용자 트리거 또는 둘 다 NOT FOR REPLICATION 옵션을 사용하여 만들어야 합니다. 두 경우 모두 병합 프로세스에서는 SQL Server 개체에 대해 원래 사용자가 시작한 변경 내용을 실행할 때 비즈니스 논리를 성공적으로 평가했으며 데이터를 파트너 복제본(replica) 복제할 때 이러한 조건을 재평가할 필요가 없다고 가정합니다. 이러한 방식으로 NOT FOR REPLICATION 을 사용할 경우의 주요 이점은 성능 향상입니다. NOT FOR REPLICATION 옵션 및 적절하게 사용하는 방법에 대한 자세한 내용은 SQL Server 2000 온라인 설명서의 NOT FOR REPLICATION 옵션 항목을 참조하세요.

이전에 나열된 두 가지 이유로 병합 에이전트 파트너 복제본(replica) 변경 내용을 제공하는 순서가 중요합니다.

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

  • 기사 애칭입니다.

  • 세대입니다.

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

  • 기사 애칭

    애칭은 병합 에이전트 복제를 병합하는 아티클(SQL Server 테이블)을 식별하는 데 사용하는 정수 값입니다. 병합 설정 프로세스는 아티클을 병합 게시에 추가할 때 아티클 애칭을 할당합니다. 아티클이 DRI 제약 조건에 참여하는 경우 병합 설정 프로세스는 정의된 DRI 제약 조건을 반영하는 아티클 애칭을 생성하려고 시도합니다. 병합 프로세스는 FOREIGN KEY 제약 조건(부모)에서 참조하는 테이블을 참조하는 테이블(자식 테이블 또는 FOREIGN KEY 제약 조건이 정의된 테이블)보다 작은 아티클 애칭을 할당합니다.

    테이블이 DRI 제약 조건에 참여하지 않는 경우 병합 설정 프로세스는 아티클을 게시에 추가하는 순서(오름차순)에 따라 아티클 애칭을 할당합니다.

  • 세대

생성은 병합 에이전트 특정 아티클의 논리적 변경 내용을 추적하는 데 사용하는 정수 값입니다. 병합 동기화 간의 특정 복제본(replica) 특정 아티클에 대한 모든 변경 내용은 동일한 세대와 연결됩니다. 병합 에이전트 실행 될 때마다 기존 열린 세대를 닫은 다음 다음 변경 내용을 연결할 새 세대를 엽니다.

INSERT, UPDATE 및 삭제 처리

병합 에이전트 특정 게시에 대한 아티클을 두 개의 고유 그룹으로 분할합니다.

  • 병합 에이전트 조인 필터 관계에 포함되지 않고 DRI를 통해 관련되지 않은 문서를 조인 필터와 관련된 아티클을 하나의 그룹에 배치합니다.

  • 병합 에이전트 조인 필터 관계에 명시적으로 관련된 아티클과 DRI를 통해 필터 아티클을 두 번째 고유 그룹에 조인하는 것과 관련된 문서를 배치합니다.

병합 에이전트 이전 그룹 중 하나에만 게시에 정의된 각 아티클을 추가합니다.

병합 에이전트 그룹을 사용하여 게시에 정의된 모든 아티클에 대해 , INSERTsDELETEsUPDATEs전체 처리 순서를 결정합니다.

각 두 그룹에서 병합 에이전트 및 오름차순 아티클 애칭 순서를 처리 INSERTsUPDATEs 하고 내림차순 아티클 애칭 순서로 처리합니다DELETEs. 먼저 병합 에이전트 모든 것을 특정 그룹에서 처리한 UPDATEs 다음 및 INSERTs (특정 그룹에서도) 처리 DELETEs 합니다. 개념적으로 병합 에이전트 앞에서 언급한 두 그룹을 이전에 나열된 순서대로 서로(병합되지 않음)에 추가합니다. 병합 에이전트 첫 번째 그룹에 대한 처리 DELETEs 로 시작한 다음, 처리를 두 번째 그룹으로 확장하고 DELETE 두 그룹의 나머지 변경 내용은 병렬로 처리됩니다. 병합 에이전트 각 그룹에서 아티클 처리 순서를 유지하지만 병합 에이전트 두 그룹 간에 엄격한 아티클 처리 순서를 유지하지 않습니다. 따라서 또는 UPDATEINSERT 경우 더 높은 아티클 애칭을 가진 첫 번째 그룹의 변경 내용이 더 낮은 애칭을 가진 두 번째 그룹의 변경 내용보다 앞서 도착할 수 있습니다. 에 대해서도 반대 상황이 발생할 DELETE수 있습니다. 이러한 두 동작은 모두 의도적으로 설계되었습니다.

아티클 처리 순서에 대한 생성 일괄 처리의 가능한 효과

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

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

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

병합 에이전트 병합 동기화의 업로드 및 다운로드 단계에서 파트너 복제본(replica) 보낼 세대를 열거할 때 이 공통 세대를 시작점으로 사용합니다.

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

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

SQL Server 별도의 생성 일괄 처리에서 자식 및 부모 세대를 처리하는 경우 비수렴성입니다.

앞에서 설명한 -UploadGenerationsPerBatch 및 매개 변수를 -DownloadGenerationsPerBatch 늘려 세대 일괄 처리 간에 부모 및 자식 변경 내용을 분할하지 않도록 할 수 있습니다.

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