首页 文章

清理Azure SQL数据同步中的元数据

提问于
浏览
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天的保留数据是安全的 .

1 回答

  • 0
    • 从源数据库中删除要删除的所有数据

    • 运行复制并等待它完成

    • 我通常再次运行它,以防更多数据作为正常操作的一部分被删除

    • 停止自动运行的复制

    • 从hub和spoke数据库中的跟踪表中删除tombstone = 1条记录

    • 将您的复制重新打开为自动

    我使用下面的脚本更“轻轻地”删除了大量数据 . 通过使用上次同步时间,您可以最大限度地减少删除sync delete命令的可能性 .

    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
    

相关问题