我有一个 SQL 服务器,它设置了与运行 SQL CE 的 800 个移动客户端的合并复制。
服务器有足够的资源,进出公司的线路绰绰有余,客户端和服务器之间的复制通常很好,但我们遇到了一个我无法追踪的间歇性错误。
昨天我们需要在我们的一个主表中插入 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)
对于我不打算插入的许多表......这可能是一个线索吗?