我们遇到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天前删除的行的元数据将被清除。如果某个成员在此保留期内未同步,则该服务会将其检测为过期成员并阻止该成员进行同步。
听起来有一种方法可以安全地修剪这些数据,有没有办法在较短的时间内触发它?我们的数据库全天同步多次,在保留数据的第一天进行修剪是安全的。
答案 0 :(得分:0)
我使用下面的脚本更轻松地"轻轻地"删除大量数据。通过使用上次同步时间,您可以最大限度地减少删除同步删除命令的可能性。
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