DMS无法使用无锁边更,如何解决?

DMS无法使用无锁边更?image.png

展开
收起
真的很搞笑 2024-04-11 08:39:00 53 分享 版权
阿里云 AI 助理回答

DMS(数据管理)无锁变更功能在某些情况下可能无法使用,以下是可能导致该问题的原因及解决方法的详细说明:


1. 数据库类型不支持

DMS无锁结构变更功能仅支持以下数据库类型: - MySQL:RDS MySQL、PolarDB MySQL版、MyBase MySQL或其他来源MySQL。 - PostgreSQL:RDS PostgreSQL、PolarDB PostgreSQL版、MyBase PostgreSQL等。

注意
- 不支持PolarDB分布式版(包括PolarDB-X 1.0和PolarDB-X 2.0)、RDS PostgreSQL等非MySQL数据库使用DMS的无锁结构变更功能。
- 如果您的数据库类型不在支持范围内,请选择其他方式执行变更。


2. 表结构限制

外键约束

DMS无锁变更不支持表上有外键的变更。如果目标表包含外键约束,您需要关闭DMS无锁变更功能,并采用原生执行方式完成变更。

主键或唯一键

目标表必须包含主键或唯一键,否则无法执行无锁结构变更。主键或唯一键用于全量拷贝分段操作及后续增量更新。

重要提醒
- 在执行结构变更期间,避免更新主键或唯一键,否则可能导致任务执行失败。


3. 实例管控模式

实例的管控模式需为稳定变更安全协同。如果实例的管控模式为自由操作,且DMS租户下有免费使用无锁变更的额度,则可以正常使用此功能。


4. 无锁结构变更未开启

在使用DMS无锁结构变更功能前,您需要先为目标实例开启无锁结构变更功能。具体步骤如下: 1. 登录数据管理DMS 5.0。 2. 在控制台首页的数据库实例区域,找到并右键单击目标实例,选择编辑实例。 3. 在高级信息区域,展开无锁结构变更的下拉列表,选择以下选项之一: - 开启(DMS无锁变更执行):直接使用DMS自研的DDL无锁变更执行。 - 开启(原生无锁优先,失败转DMS执行):优先尝试使用数据库原生OnlineDDL无锁执行,若失败则自动转用DMS引擎执行。 4. 单击保存


5. 数据库账号权限不足

使用无锁结构变更功能时,数据库账号需具备以下权限: - ALL PRIVILEGES权限,或以下读写权限: - ALTER、CREATE、DELETE、DROP、INDEX、INSERT、LOCK TABLES、SELECT、TRIGGER、UPDATE、REPLICATION CLIENT和REPLICATION SLAVE权限。

如果当前数据库账号权限不足,您可以: - 授权数据库账号权限。 - 更换数据库账号。


6. 磁盘空间不足

由于无锁结构变更需要在目标数据库中新建临时表用于数据拷贝,因此磁盘剩余空间需为目标表的两倍以上。如果磁盘空间不足,将导致实例被锁定。


7. Binlog日志未开启

对于PolarDB MySQL版,默认未开启Binlog日志。您需要手动开启Binlog日志以支持无锁结构变更功能。


8. SQL语句限制

DMS无锁结构变更对SQL语句有一定的限制: - 不支持增加唯一约束(UK):由于DMS无锁结构变更的原理限制,不支持增加唯一约束。 - 空表处理:如果目标表为空表,DMS会自动降级为原生无锁执行,因为执行空表无风险且速度更快。


9. 其他注意事项

  • 目标表名长度限制:目标表名的长度不能超过56个字符。
  • 执行时间差异
    • 使用DMS无锁变更执行时,执行时间相对MySQL原生OnlineDDL会慢一些,但不会产生主备延迟现象。
    • 使用原生无锁优先执行时,执行时间较快,但可能导致主备延迟。

解决方法总结

如果DMS无法使用无锁变更,请根据上述原因逐一排查: 1. 确认数据库类型是否支持。 2. 检查目标表是否存在外键约束或缺少主键/唯一键。 3. 确保实例的管控模式为稳定变更或安全协同。 4. 开启目标实例的无锁结构变更功能。 5. 检查数据库账号权限是否满足要求。 6. 确保磁盘空间充足。 7. 确认Binlog日志已开启。 8. 检查SQL语句是否符合限制条件。

如仍无法解决问题,建议联系阿里云技术支持获取进一步帮助。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

阿里云提供了一系列数据库管理工具,可以满足您在云上进行数据库管理的各种需求。包含数据传输服务DTS、数据库备份 DBS、数据库自治服务 DAS、数据管理 DMS。

还有其他疑问?
咨询AI助理