首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清理Azure SQL数据同步中的元数据

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

Stack Overflow用户
提问于 2016-03-14 17:09:10
回答 1查看 1.6K关注 0票数 0

我们在Azure Sql数据同步方面遇到了性能问题,跟踪表很大,而且可能比源表(跟踪表的大小为2-10GB)大。这使得数据异步非常慢,而db非常密集。在日志记录表中,这尤其痛苦,因为我们每个月都可以生成大量的数据。

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

数据同步服务定期进行元数据清理。这将从跟踪表中删除超过保留期的项。 例如,当这些更改长期传播到成员数据库时,保留已删除行的元数据是没有意义的。 目前,这一保留期定为45天。这意味着删除45天前删除的行的元数据将被清除。如果某个成员在此保留期内没有同步,则服务将检测到它是一个过时的成员,并防止该成员同步。

听起来好像有一种方法可以安全地减少这些数据,是否有一种方法可以在更短的时间内触发这些数据呢?我们的数据库在一天内同步了很多次,并且在1天的保留数据时可以安全地修剪。

EN

回答 1

Stack Overflow用户

发布于 2016-05-01 21:01:57

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

我使用下面的脚本来“温和地”删除大量数据。通过使用最后一次同步时间,可以将删除同步删除命令的可能性降到最低。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35993833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档