全部产品
云市场

无锁数据变更

更新时间:2020-03-18 14:45:11

背景

当业务累积了大量数据时,需要对在线数据与历史数据进行分隔管理,或定期清除表中数据。常见的现象是:

  • 单条SQL影响行数非常多(会出现日志超过参数阀值而执行失败)
  • SQL不走索引(会导致锁表,增加数据库负载甚至导致业务故障)

此类问题通常都会通过分批执行的方法解决,但是也有很多风险。例如:

  • 研发写程序分批处理。如果分批的方式不当,例如直接用limit分批,可能仍会锁表、分批执行的频率没有很好控制还会造成主备延迟过大,这些都会对数据库造成影响,进而影响业务。
  • DBA提取目标数据手动拆分,分批执行。人工拆分非常繁琐,工作量大,还容易出错,并且很难进行动态调整。

基于以上原因,DMS企业版提供无锁数据变更功能,更好地满足业务方对大量数据变更的需求(例如历史数据清理、全表更新字段等),同时保证执行效率,以及减小对数据库性能、数据库空间等的影响,做到不影响业务。

注意事项

  • 不支持事务指定。
  • 不支持变更前镜像的备份处理。
  • 暂不支持工单的快速复制,即暂无类似创建功能。

操作步骤

  1. 登录企业版DMS管理控制台

  2. 在上方选择数据方案>数据变更>无锁数据变更无锁数据变更

  3. 填写数据变更工单申请。参数如下:
    • 原因类别:选择数据变更的原因,方便后续查找。
    • 业务背景:详细描述变更原因或目标,减少沟通成本。
    • 变更相关人:设置的相关人员都可查看工单,并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。
    • 数据库:选择有变更权限的数据库。只有数据库的查询权限或只有表的变更权限时无法提交。
    • 变更SQL:可直接执行的SQL语句。提交时会自动校验语法正确性,不正确则无法提交。
    • 回滚SQL:可直接执行的SQL语句,变更SQL对应的逆向SQL。支持文本或txt/sql类型的附件。
    • 工单附件:可以上传图片或文档对变更内容进行补充。数据变更工单申请
  4. 等待预检查通过,单击提交审批,在提示页面再次单击确认

    审批流程节点人员可按需自定义组合,最细粒度为实例级别。 审批流程

  5. 等待审批通过,单击执行变更,选择执行时间,然后单击确定执行

    • 默认为立即执行,也可以自行选择时间。
    • 如果指定结束时间,在时间到达后还未完成的更新将会终止不再更新,主要为了防止业务高峰期时影响业务。
  6. 等待执行完毕。 执行完毕

    • 每扫描10,000行需要更新的数据后,会sleep暂停0.5秒。
    • 默认每一批以主键或唯一键进行更新,初始值为1000条记录,若还是失败则会自动降低阀值,执行直至没有满足条件的数据后完成更新。