SQL CE를 실행하는 800 개의 모바일 클라이언트에 병합 복제가 설정된 SQL 서버가 있습니다.병합 복제 데이터베이스의 삽입물이 매우 느립니다.
서버의 리소스가 충분하고 회사 내부와 외부의 회선 수가 충분하지 않은 경우 일반적으로 클라이언트와 서버 간의 복제가 좋지만 간헐적 인 오류가 발생하여 추적 할 수 없습니다.
어제 우리 메인 테이블 중 하나에 550 개의 레코드를 삽입해야했지만 존재하는 유일한 트리거는 표준 병합 복제입니다.
이 삽입물은 동기화하려는 모바일 장치에 지속적으로 교착 상태가 발생하여 14 시간이 걸렸습니다.
삽입에 대한 잠금을 피할 수있는 방법과 전체 프로세스의 속도를 향상시키는 방법에 대한 조언이있는 사람이 있습니까?
------ 업데이트 -----
나는 하나의 삽입을 통해 프로파일 러를 실행 한 일부 의견에 이어 나는 이런 종류의 물건을 많이보고 있어요
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_JEMProjectME_PromotionResource_PARTITION_VIEW] v with (rowlock)
ON mc.tablenick = 286358001
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 = 286358001 and
rowguid = v.[rowguid] and
partition_id = v.partition_id)
삽입 할 의도가없는 많은 테이블의 경우 ... 실마리가 될 수 있습니까?
1. 삽입 및 동기화에서 사용되는 격리 수준은 무엇입니까? 일반적으로 insert는 문제가되지 않습니다. 2. 몇 개의 색인이 있습니까? 3. 증분이 아닌 인덱스가 있으며 레코드가 끝 대신 트리 구조의 중간에 삽입 됩니 까? 4. 클러스터 된 인덱스가 있습니까? – Farfarak
1. 격리 수준에서는 확실하지 않습니다. 표준 삽입 문입니다. 2. 1 개의 표준 인덱스가있는 테이블 A에 삽입됩니다. 그러나 병합 복제 트리거는 다른 많은 테이블에 막대합니다. 3. 테이블에 없습니다. 아니요 –
1. 복제 중에 호출되는 쿼리를 사용하면 복제 프로세스가 케이스 힙의 전체 테이블을 차단할 수 있습니다 (클러스터 된 인덱스가없는 경우). 2. 테이블? – Farfarak