Sql server 2008 SQL Server中同步时的并行查询执行

Sql server 2008 SQL Server中同步时的并行查询执行,sql-server-2008,sql-server-2008-r2,microsoft-sync-framework,Sql Server 2008,Sql Server 2008 R2,Microsoft Sync Framework,我正在使用Microsoft Sync Framework在N层客户端-服务器体系结构中同步数据。当需要同步的数据量较低时,同步工作正常。然而,当有大量数据需要同步时,我会面临数据库锁定问题。此行为的主要原因似乎是长时间运行的事务,这会导致来自多个同步代理的其他事务被阻止。我已经测试了以下内容: Sql Server 2008-->物理机/VM-失败,存在锁定问题 Sql Server 2008 R2-->物理计算机/VM-在物理上成功,在虚拟机上失败 敬请告知,导致这种行为的问题可能是什么

我正在使用Microsoft Sync Framework在N层客户端-服务器体系结构中同步数据。当需要同步的数据量较低时,同步工作正常。然而,当有大量数据需要同步时,我会面临数据库锁定问题。此行为的主要原因似乎是长时间运行的事务,这会导致来自多个同步代理的其他事务被阻止。我已经测试了以下内容:
Sql Server 2008-->物理机/VM-失败,存在锁定问题
Sql Server 2008 R2-->物理计算机/VM-在物理上成功,在虚拟机上失败


敬请告知,导致这种行为的问题可能是什么。我认为这种行为超出了同步框架的范围,因为同步框架为一个批打开一个事务(我在同步中使用批处理),并在批处理完成时提交。但是,我无法理解多个数据库对象被锁定时的行为(长时间运行的事务,即使在我注意到几乎所有表对象都被锁定的时候!),

Sync Fx没有显式地发出锁定

不过,与其他数据库应用程序一样,在同步期间,某些行在应用更改时会被锁定。它是只锁定几行还是锁定整个表取决于SQL Server提升或升级来自行、页或表的锁定

因为,它与任何其他数据库应用程序一样,您可以使用相同的技术来调查锁定问题(例如,分析、sp_who等)


<>如果你的同步组/同步范围很大(很多表),你可以考虑把它们分解成更小的组,这样他们就可以更快地提交并减少潜在的并发问题。如果更新的行数较少,频繁的同步也有助于减少锁定问题的可能性。

嗯,问题在同步框架方面。Sync Fx 2.1中有一个新属性“ApplicationTransactionSize”。它默认为0。此属性的大小以KB为单位,如果设置为0,则所有批处理都应用于单个事务中,如果设置了其大小,则打开具有给定大小的事务。我设置了这个属性,一切都像一个符咒。如果我遗漏了什么,请更正。同样,ApplicationTransactionSize不会发出显式锁。它只告诉Sync Fx在任何给定时间提交多少。您设置的越低,它提交事务块的频率就越高,所以锁的持有时间就越短。请注意,这是以KB为单位的,并且取决于行的大小,如果不是数千行的话,最终可能会锁定很少或数百行。另外,通过设置batch size和applicationtransaction size,您实际上减慢了同步速度,因为框架必须分解块中的更改。是的,我知道性能会降低,但如果我们不设置此属性,为什么同步框架在单个事务中处理所有批?我假设它在一个单独的事务中处理每个批,阅读批处理。我是你刚才引用的博客的作者。批处理与事务无关。它只是将变更数据集的上传分解成块。上传批处理文件后,它们将被重建为数据集并应用。我不是说不应该设置applicationtransactionsize,我只是说框架中没有任何东西会发出显式锁。applicationtransactionsize不是为了解决锁定问题,而是为了解决不可靠的连接。是的,我知道你是这个博客的作者,一个相当不错的博客。如果您阅读了我的问题,我已经清楚地提到,这个问题不在同步框架方面。但我的问题仍然存在:为什么它为所有批次打开单个事务?任何具体的原因,因为在事务中划分批是一个明显的要求。