증상
Microsoft SQL Server 2012 또는 Microsoft SQL Server 2014의 매개 변수화 된 및 조인 필터를 사용 하 여 병합 복제에 precomputed 파티션을 사용할 것으로 가정 합니다. 필터 (게시자)의 루트에서 테이블의 insert 문을 사용 하려고 하면 삽입성능이 저하 될 수 있습니다.
해결 방법
이 핫픽스를 적용 한 후에는 게시 된 데이터베이스에서 수동으로 sp_vupgrade_mergeobjects 프로시저를 실행 해야 합니다. 이를 통해 통합 복제에 대 한 데이터 변경을 추적 하 고 적용 하는 데 사용 되는 문서 관련 트리거, 저장 프로시저, 뷰를 다시 생성할 수 있습니다. 이 문제는 다음 SQL Server 누적 업데이트에서 처음 수정 되었습니다.
SQL Server 2014 누적 업데이트 5 /en-us/help/3011055
SQL Server 2012 SP2에 대 한 누적 업데이트 3 /en-us/help/3002049
각각의 새로운 새 누적 업데이트에는 이전 누적 업데이트에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. SQL Server에 대 한 최신 누적 업데이트를 확인 하세요.
추가 정보
<테이블에 삽입>트리거 병합 삽입 트리거 MSmerge_ins_XXXX을 수행 하면 트리거가 프로시저 MSmerge_expand_sp_XXXX호출 합니다. 이 문제가 발생 하는 경우 병합 확장 프로시저에 대 한 다음 Insert/Select Distinct 문은 시간이 많이 소모 MSmerge_expand_sp_XXXX . 이 경우 삽입 성능이 저하 됩니다.
insert into dbo.MSmerge_current_partition_mappings with (rowlock) (publication_number, tablenick, rowguid, partition_id) select distinct 1, mc.tablenick, mc.rowguid, v.partition_id from dbo.MSmerge_contents mc with (rowlock) JOIN dbo.[MSmerge_dynamic_filter_merge_new_settings_PARTITION_VIEW] v with (rowlock) ON mc.tablenick = <tablenick> and mc.rowguid = v.[rowguid] and mc.marker = @child_marker and v.partition_id in (select partition_id from dbo.MSmerge_current_partition_mappings cpm with (rowlock) JOIN dbo.MSmerge_contents mc2 with (rowlock) ON cpm.rowguid = mc2.rowguid and mc2.marker = @marker) where not exists (select * from MSmerge_current_partition_mappings with (readcommitted, rowlock, readpast) where publication_number = 1 and tablenick = <tablenick> and rowguid = v.[rowguid] and partition_id = v.partition_id)
상태
Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.