매개 변수가 있는 필터 및 조인 필터를 사용하여 병합 게시의 테이블을 하나 이상 필터링하면 게시된 테이블의 데이터가 분할됩니다. 파티션은 단순히 테이블의 행 하위 집합입니다. 구독자가 게시자와 동기화되는 경우 게시자는 구독자가 시스템 함수 SUSER_SNAME() 및/또는 HOST_NAME()에 대해 제공하는 값에 따라 구독자의 파티션에 속하는 행을 결정해야 합니다. 필터링된 데이터 세트를 수신하는 각 구독자에 대해 게시자에서 변경 내용의 파티션 멤버 자격을 확인하는 이 프로세스를 파티션 평가라고 합니다.
게시된 테이블의 데이터와 매개 변수가 있는 필터 및 관련 조인 필터를 만들 때 선택한 설정에 따라 게시된 테이블의 각 행은 다음을 수행할 수 있습니다.
하나의 파티션에 속하며 하나의 구독자(매개 변수
3의sp_addmergearticle값)에@partition_options만 복제됩니다. 예를 들어,AdventureWorks2025데이터베이스에서Employee테이블을WHERE Employee.LoginID = SUSER_SNAME()조건을 사용하여 필터링할 수 있습니다. 각 로그인 ID와 일치하는 행은 하나의 구독자에게만 전송됩니다.하나의 파티션에 속하고
2의 값으로 두 명 이상의 구독자에게@partition_options로 복제됩니다. 예를 들어,AdventureWorks2025데이터베이스에서Products테이블을WHERE Products.ProductLine = HOST_NAME()조건을 사용하여 필터링할 수 있습니다.HOST_NAME()값은 산악 자전거 판매를 담당하는 영업 사원 그룹이ProductLine열에서 값이 "M"인 모든 행을 받을 수 있도록 재정의됩니다.ProductLine열에서 값이 "M"인 각 행은 하나의 파티션에만 속하지만 여러 구독자에게 전송됩니다. 사용에HOST_NAME()대한 자세한 내용은 HOST_NAME()를 사용한 필터링을 참조하세요.둘 이상의 파티션에 속하며
0의 경우1또는@partition_options으로 둘 이상의 구독자에 배포됩니다. 예를 들어,AdventureWorks2025데이터베이스에서Products테이블을WHERE Products.ProductLine = HOST_NAME() OR Products.ListPrice < 100조건을 사용하여 필터링할 수 있습니다. 이 경우, 산악 자전거 판매를 담당하는 영업 사원은 판매 가격이 $ 100 달러 미만인 한 다른 범주의 제품을 판매 할 수 있습니다. 필터 절의 OR 때문에 행이 둘 이상의 파티션에 속할 수 있습니다.
파티션 평가 방법
파티션 평가는 사전 계산 파티션 기능이 사용되는지 여부에 따라 병합 복제에서 두 가지 방법 중 하나로 수행됩니다. 몇 가지 요구 사항이 충족되면 새 병합 게시는 기본적으로 사전 계산 파티션을 사용하도록 설정하여 만들어지고 기존 게시는 기능을 사용하도록 자동으로 업그레이드됩니다. 전체 요구 사항 목록은 매개 변수가 있는 필터 - 미리 계산된 파티션에 최적화를 참조하세요.
사전 계산 파티션을 사용한 파티션 평가
사전 계산 파티션을 사용하면 게시자의 모든 변경 내용에 대한 파티션 멤버 자격이 미리 계산되고 게시된 테이블이 변경될 때 유지됩니다. 따라서 구독자가 게시자와 동기화되면 파티션 평가 프로세스를 거치지 않고도 해당 파티션과 관련된 변경 내용을 즉시 다운로드할 수 있습니다. 이렇게 하면 게시에 많은 변경 내용, 구독자 또는 아티클이 있는 경우 성능이 크게 향상됩니다.
사전 계산 파티션 평가와 관련된 시스템 테이블은 다음과 같습니다.
MSmerge_partition_groupsMSmerge_current_partition_mappingsMSmerge_past_partition_mappings
MSmerge_partition_groups 에는 게시에 정의된 각 파티션에 대해 하나의 행이 포함됩니다. 파티션은 다음과 같습니다.
명시적으로
sp_addmergepartition또는 게시 속성 대화 상자의Data Partitions페이지를 통해 정의됩니다.구독자가 동기화될 때,
MSmerge_partition_groups에 아직 항목이 없는 파티션이 필요한 경우 자동으로 생성됩니다.
다른 두 테이블(MSmerge_current_partition_mappings 및 MSmerge_past_partition_mappings)은 게시된 테이블이 변경될 때 채워집니다. 게시 데이터베이스의 게시된 테이블에서 변경될 때마다 병합 트리거가 실행되고 메타데이터를 기록합니다.
MSmerge_current_partition_mappings에는MSmerge_contents와MSmerge_partition_groups의 각 고유한 행 조합에 대해 하나의 행이 포함됩니다. 예를 들어 사용자 테이블의 행이 두 파티션에 속하고 행이 업데이트되면 업데이트를 반영하기 위해 한 행이 삽입MSmerge_contents되고 두 개의 행이 삽입되어 업데이트된MSmerge_current_partition_mappings행이 두 파티션에 속함을 나타냅니다.MSmerge_past_partition_mappings는 지정된 파티션에 더 이상 속하지 않는 각 행에 대해 하나의 행을 포함합니다. 다음과 같은 경우 행이 파티션 밖으로 이동합니다.행이 삭제됩니다. 사용자 테이블에서 행이 삭제되면, 행이
MSmerge_tombstone에 삽입되고, 하나 이상의 행이MSmerge_past_partition_mappings에 삽입됩니다.필터링에 사용되는 열의 값이 변경되었습니다. 예를 들어 매개 변수가 있는 필터가 회사를 본사로 두고 회사가 이동하는 상태를 기반으로 하는 경우 회사의 행(및 다른 테이블의 관련 행)이 한 영업 담당자의 데이터 파티션에서 다른 영업 사원의 파티션으로 이동할 수 있습니다. 행이 업데이트되어 더 이상 파티션에 속하지 않게 되면,
MSmerge_contents에 행이 삽입되거나 업데이트되고, 하나 이상의 행이MSmerge_past_partition_mappings에 삽입됩니다.비고
파티션당 하나의 구독(매개 변수 값
3)이 있는 오버오버를 수행하지 않는 파티션을 사용하는 경우 각 행이 하나의 파티션에sp_addmergearticle만 속하며@partition_options하나의 구독자에서만 변경할 수 있으므로 시스템 테이블MSmerge_current_partition_mappings은 행의 파티션 매핑을 추적하는 데 사용되지MSmerge_past_partition_mappings않습니다.
SetupBelongs 프로세스를 사용한 파티션 평가
미리 계산된 파티션이 없으면 SetupBelongs라고 하는 프로세스가 사용됩니다. 동기화하는 동안 병합 에이전트가 특정 구독자에 대해 마지막으로 실행된 이후 게시자에서 필터링된 테이블에 대한 각 변경 내용에 대해 파티션 평가가 수행됩니다. 이 프로세스는 게시자와 동기화되는 모든 구독자에 대해 반복됩니다.
구독자에 대한 파티션 평가를 수행하기 위해 병합 에이전트는 시스템 저장 프로시저 sp_MSsetupbelongs를 호출합니다.
필터링된 각 아티클
#belongs_<RandomNumber>#notbelongs_<RandomNumber>에 대해 두 개의 임시 테이블을 만듭니다.구독자에서 반환된
SUSER_SNAME()값 및/또는HOST_NAME()함수를 사용하여 시스템 보기를 쿼리합니다. 이 쿼리는 행이 구독자의 파티션에 있는지MSmerge_contents또는MSmerge_tombstone관련이 있는지 확인하는 데 사용됩니다.행이 구독자와 전혀 관련이 없는 경우(예: 다른 파티션에 대한 삽입) 이 행에 대한 메타데이터는 저장
#belongs되지 않습니다.#notbelongs행이 관련된 경우 다음과 같은 두 가지 결과가 발생할 수 있습니다.#belongs에 행이 추가되는 경우:MSmerge_contents의 행이 파티션에 속하는 삽입이거나,MSmerge_contents의 행이 필터링에 사용되는 열의 값을 변경하지 않는 업데이트일 때.행은 다음과 같은 경우
#notbelongs에 추가됩니다:MSmerge_contents에서의 행이 필터링에 사용되는 열의 값을 변경하는 업데이트인 경우(즉, 행이 새로운 파티션으로 이동되는 경우) 또는MSmerge_tombstone에서의 행이 파티션에서의 행 삭제를 나타내는 경우.
비고
사전 계산 파티션을 사용하도록 설정하더라도 다른 구독이 변경 내용을 받기 시작한 후 구독이 만들어지면 구독이 처음 동기화될 때 SetupBelongs 프로세스가 사용됩니다.
관련 콘텐츠
- 병합 복제
- MSmerge_contents(Transact-SQL)
- MSmerge_current_partition_mappings
- MSmerge_generation_partition_mappings(Transact-SQL)
- MSmerge_genhistory(Transact-SQL)
- MSmerge_partition_groups(Transact-SQL)
- MSmerge_past_partition_mappings(Transact-SQL)
- MSmerge_tombstone(Transact-SQL)
- sys.sp_addmergearticle (Transact-SQL)
- sys.sp_addmergepartition (Transact-SQL)
- sysmergearticles(Transact-SQL)
- sysmergesubscriptions(Transact-SQL)
- 조인 필터
- 매개 변수가 있는 필터 - 매개 변수가 있는 행 필터