0

我们遇到了 Azure Sql Data Sync 的性能问题,即跟踪表很大,并且可能比源表大(跟踪表为 2-10GB)。这使得数据同步非常缓慢且数据库密集。这在我们可以每月生成大量数据的记录表中​​尤其痛苦。

阅读https://jtabadero.wordpress.com/2012/08/23/things-you-need-to-know-about-sql-data-sync-service/项目 17

数据同步服务会定期进行元数据清理。这将从跟踪表中删除超过保留期的条目。

例如,当这些更改早已传播到成员数据库时,保留已删除行的元数据是没有意义的。

目前,此保留期设置为 45 天。这意味着清除 45 天前删除的行的删除元数据。如果成员在此保留期内未同步,则服务会将其检测为过期成员并阻止该成员同步。

听起来有一种方法可以安全地修剪这些数据,有没有办法在更短的时间内触发它?我们的数据库全天同步多次,在 1 天的保留数据中修剪是安全的。

4

1 回答 1

0
  1. 从源数据库中删除要删除的所有数据
  2. 运行复制并等待它完成
  3. 我通常再运行一次,以防更多数据作为正常操作的一部分被删除
  4. 停止复制自动运行
  5. 从中心和分支数据库中的跟踪表中删除 tombstone=1 记录
  6. 将复制重新打开为自动

我使用下面的脚本来更“温和地”删除大量数据。通过使用上次同步时间,您可以最大限度地减少删除同步删除命令的机会。

declare @last_Sync datetime
set @last_Sync = '5-1-16 5:00pm'

select count(*) from datasync.XXX_dss_tracking with(nolock) where sync_row_is_tombstone=1 and last_change_datetime < @last_Sync

declare @i int
set @i=0

while (@i<100) begin
    delete from datasync.XXX_dss_tracking  where xxx_id  in 
        (select top 1000 xxx_id from datasync.XXX_dss_tracking with (nolock) where sync_row_is_tombstone=1 and last_change_datetime < @last_Sync)

    set @i=@i+1
end
于 2016-05-01T21:01:57.000 回答