若您需要在不锁表的前提下变更大量表数据,您可使用数据管理DMS的无锁变更。该功能通过将单个SQL拆分成多个批次执行,以实现不锁表进行表数据变更,同时也可以减少DML操作对数据库性能,空间等的影响。本文介绍在DMS中进行无锁数据变更的方法。
前提条件
- 支持的数据库类型: - MySQL:RDS MySQL、PolarDB MySQL版、MyBase MySQL、PolarDB分布式版、其他来源MySQL 
- PostgreSQL:RDS PostgreSQL、PolarDB PostgreSQL版、MyBase PostgreSQL、其他来源PostgreSQL 
- MariaDB:RDS MariaDB、其他来源MariaDB 
- OceanBase MySQL模式 
- PolarDB PostgreSQL版(兼容Oracle) 
 
- 实例的管控模式为稳定变更或安全协同。更多信息,请参见查看管控模式。 
注意事项
- DML无锁变更仅支持单表、简单的SQL操作(例如UPDATE、DELETE等)。 
- 美国地域的DMS暂不支持此功能。 
操作步骤
- 登录数据管理DMS 5.0。
- 在顶部菜单栏中,选择。 说明- 若您使用的是极简模式控制台,请单击左上角的  图标,在导航栏中选择。 图标,在导航栏中选择。
- 配置无锁变更工单,配置完成后,单击提交申请。部分参数信息说明如下: 说明- 以安全协同实例举例配置。自由操作或稳定变更管控模式的实例,在配置时仅需配置数据库与变更SQL。 - 配置项 - 是否必填 - 说明 - 数据库 - 是 - 搜索并选择目标数据库。 说明- 您需要有目标数据库的变更权限。更多信息,请参见查看我的权限。 - 业务背景 - 否 - 建议填入业务需求的背景信息,以降低沟通成本。 - 执行方式 - 是 - 选择工单的执行方式: - 审批通过后,提交者执行。 
- 审批通过后,自动执行。 
- 最后一个审批人执行。 
 说明- 管理员可以在中,修改执行方式列表。具体操作,请参见配置管理。 - 影响行数 - 是 - 预估本次更新会影响的数据行数,可在SQL Console中使用 - count统计。说明- 如果数据持续写入,则统计当前已存在的数据行数即可。 - 变更SQL - 是 - 输入DML(Data Manipulation Language),例如 - UPDATE、- DELETE、- INSERT_SELECT。说明- 如果变更SQL输入的是DDL,则您进行的是DDL无锁结构变更任务。更多信息请参见通过无锁变更工单实现无锁结构变更。 - 回滚SQL - 否 - 可直接执行的SQL语句,变更脚本对应的逆向脚本。 - SQL文本 - 否 - 回滚SQL选择了文本,才会出现该配置项。输入回滚SQL,回滚SQL为变更SQL对应的逆向脚本。 - 附件 - 否 - 回滚SQL选择了附件,才会出现该配置项。单击上传文件,上传回滚SQL附件。 说明- 附件仅支持.txt、.zip和.sql的文件类型,最大不能超过15 MB。 - 变更相关人 - 否 - 设置的相关人员都可查看工单,并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。 - 工单附件 - 否 - 上传工单附件,补充当前工单信息。 
- 提交申请后,您可以开启主备延迟检查并确定阈值、修改SQL。 - (可选)开启主备延迟检查、设置阈值。设置主备延迟检查并确定阈值,以避免主备延迟过大,从而影响主备实例切换。 - 您可以在基本信息区域,单击分批执行配置,设置合理的主备延迟阈值(单位:秒)。如果主备延迟大于阈值时,将中断SQL执行。 说明- 目前仅支持RDS MySQL数据库使用该功能。 
- (可选)修改SQL。 - 提交申请后,系统将自动进行SQL预检查。如果预检查失败,您可以根据失败原因修改SQL,修改后重试。 
 
- 单击提交审批。安全协同实例会根据设置的审批规则进行审批,稳定变更实例将自动通过审批。 
- 等待审批通过后,在工单详情页的执行区域,单击执行变更。 说明- 您可以在工单详情页的审批区域,查看审批进展。 
- 配置任务执行参数。 - 配置项 - 说明 - 执行策略 - 立即执行:系统默认,单击确认执行后立即执行工单任务。 
- 定时执行:选择任务开始执行时间。单击确认执行后,在指定的时间执行该任务。 
 说明- 定时任务的实际执行时间可能与设定执行时间之间存在±1分钟的误差。 - 指定结束时间 - 指定任务结束时间。如果任务在指定结束时间之前没有执行完毕,则系统将不再继续执行未完成的SQL任务,防止高峰期执行任务,影响业务运作。 说明- 任务的实际结束时间可能与指定结束时间之间存在±1分钟的误差。 - 是否开启主备检查 - 为该数据库开启主备检查后,可实时保障主备数据同步、保障数据库高可用性和故障快速恢复能力。 - 灰度类型 - 批次执行SQL策略。 - 无灰度:DMS自动执行任务中的所有SQL。 
- 灰度第一条SQL成功后暂停:第一条SQL执行成功后,DMS将会自动暂停执行SQL。如您需要继续执行SQL,请单击重试,剩余SQL将会一次性执行完成,中间再无暂停。 
- 每条SQL执行成功后暂停:每条SQL执行后都会自动暂停,需要您手动单击重试来执行下一条SQL。 
 
- 单击确定执行。 说明- 已暂停的任务重启后,会重新开始执行任务。 - 您可以在执行区域,查看任务执行状态、任务设置、详情和调度日志。 
相关文档
- 在进行无锁数据变更后,您还可能需要进行如下操作: 
- 无锁数据变更的相关API如下: 
常见问题
Q:无锁数据变更是否支持复杂的SQL操作?
A:不支持。例如CREATE_INDEX和多表操作(例如DELETE语句中包含JOIN)。更多支持的SQL类型,请参见使用限制。