我在美国的不同服务器上工作了一组数据库(最大的1TB) - 在美国,2个在欧洲2。

我们在4个节点之间每次数据库运行完整的对等复制 - 所以它们都可以采取事务(插入/更新/删除),并且都具有其他节点收集的数据(在变量延迟中 - 最坏连接平均约30-40秒)。

最大的数据库从2008年初到今天的数据携带数据。所有这些数据都进一步复制到报告保存所有数据的节点。

我需要在交易节点上删除数据,最长到2013,以删除事务节点处的驱动器空间缺陷,因此历史数据只会在报告节点上可用。

是什么最好的方法?数据相对可管理,因为它很好地划分(每月分区,然后每年分为单独的文件/文件组)。但是,在涉及复制和读取分区切换时,存在无法删除分区的问题 - 这是不允许的。 (切换分区先决条件 - 点18 )

作为一个完整的生产环境,我试图避免任何影响复制的任何东西 - 包括重新同步(大量数据到较大的距离)。

有没有人对如何执行此任务有任何良好建议?

有帮助吗?

解决方案

所以,这里没有答案,但经过一定的讨论和思想,我几个月前提出了一个计划。

我会为这个论坛做出这个答案简明扼要(你可能不同意我有!),试图帮助将来需要在未来执行类似的任务的人,如果我错过了什么,请随时提出问题 - 虽然该方法是直接的。

所以,主要问题是删除数据对节点的生产流量的显着影响,我们正在复制到/来自。这样做的最简单方法是分离要继续工作的节点,从该节点中删除数据,同时将所有其他节点未受影响(包括报告节点)。

最好的方法(请记住您无法删除分区,任何/大多数操作都会复制,因此创建大量流量和大量的行更改),是创建一个新的sp并设置发布围绕这个一个sp。因此应该在所有节点上使用它。重要的位是设置复制以复制SP的执行 - 而不是结果(即,复制EXEC SP_DELETE呼叫而不是删除,其中ID= 1,删除ID= 2 - 行级别更改)。这是右键单击新发布(在拓扑中设置其他节点之前)>属性>文章>单击您具有设置的SP_Delete>文章属性按钮>设置突出显示的存储过程文章的属性>复制行=执行存储过程。完成您的P2P拓扑。

但MHSQLDBA,您可能会说,这只是通过SP分别删除每个节点处的行。 - 这就是您将SP设置为仅执行删除的原因:

如果@@ servername='要影响的当前服务器'

按照删除过程按照它。

因此,当您在不希望执行删除的服务器上拾取此EXEC调用时,它将被忽略,因为@@ ServerName不会等于您选择的服务器。

您可以思考 - 为什么不仅只需在您感兴趣的服务器上创建一个SP并运行那样? - 这是因为如果您这样做,复制会将更改分解为它们如何影响文章(表)行并复制实际更改 - 您必须复制SP,以便您可以指定已复制SP的EXEC而不是由此产生的变化。

这是我认为/经验中的提出的事件顺序:

  1. 使用删除代码创建sp,指定它只会运行删除代码如果@@ servername=您所需的服务器
  2. 设置一个新的发布,将此1 SP与replicate=在文章属性中的存储过程中进行复制
  3. 在您所需的服务器处运行SP,并幸福快乐,您尚未带上数千个复制的删除命令
  4. 注意点:

    1. 这仍然是一个艰苦的任务。通过使用此方法,您已经减少了您对所有工作服务器的影响。你没有减少工作量的工作量,实际上你已经更糟糕了 - 你必须在每个节点上运行这个同样的sp(如果使用if线更改为您所针对的服务器),有效地增加了您所拥有的工作要做,通过您必须影响的服务器数量。虽然您对所有其他节点的影响很大(我假定您当然无法在您当然工作的节点中取得了最小的影响!)
    2. 通过使用此方法,您在节点之间创建了不一致 - 您真的需要确保您删除的数据不会在完成对所需工作的所有节点上执行相同的操作之前更改。如果您在1个节点删除的行中删除了一行,则在其余的房地产内更改,您将最终符合一致性错误。
    3. 您可能会将正常复制预期的SLA落后于您正在处理的节点(我强烈建议您在批量删除时读取) - 因此需要为了意识到,一旦操作完成,在删除操作的锁已发布后备份备份之前,您就不会返回操作。如果您在高延迟线上复制,我非常确切地建议您使用拉动代理而不是推 - 它差异。
    4. 可能有更好的方法可以在SP中移动数据而不是使用删除 - 也许将其移动到不涉及复制的另一个表,然后删除“新”表 - 或反向,如果您的数据想要保留少于删除的金额,移动要保留的数据来留给一个新表,删除旧的旧表,然后重命名你的新表 - 从这些角度出发了很多建议 - 我在一个环境中工作比促进概念更容易争取删除

有些人员不会理解,所以我正在描述痛苦但基本的方式。

免责声明:以上所有都是危险的。如果在没有适当的情况下匆匆完成,您可以严重搞定复制拓扑,贵公司的数据,可能是您的工作。请采取上述方法,开发自己的战斗机 - 创建一个测试环境,以证明概念,测试测试和重新测试,不要轻描淡写。有足够的考虑,您将实现您的任务 - 但在几个午餐啤酒之后,周五下午不值得。对吧,做一次(尽可能多地测试),正确做到这一点。

我希望这有助于别人。 - 如果我想要这个答案,我正在添加这个位,因为我想要这个答案:

从点对点复制拓扑中删除大量数据

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top