阿里云数据管理DMS的无锁变更功能支持DML无锁变更与DDL无锁变更。 大表变更 当您进行大表更新时,可能会因单条SQL影响多条行数而出现日志超过参数阀值而执行失败,或因SQL不走索引导致锁表等。 结构变更 在MySQL5.5以及之前的版本中,MySQL的DDL仅提供Table-Copy和In-Place(MySQL5.5开始提供)两种执行算法。 MySQL5.6及后续版本提供了Innodb-OnlineDDL能力 覆盖了大范围的DDL类型(添加列、删除列、列名修改、添加索引、修改索引等),但仍然有些常见的DDL类型无法 覆盖(修改列的类型、修改列的长度、修改字符集等)。 为解决上述问题,DMS提供无锁变更功能,支持DML无锁变更与DDL无锁变更,您可以通过该功能执行变更 操作,规避大量风险。 当业务累积了大量数据时,需要对在线数据与历史数据进行分隔管理,或定期清除表中数据。常见的现象有: 单条SQL影响行数非常多(会出现日志超过参数阀值而执行失败) SQL不使用索引(会导致锁表,增加数据库负载甚至导致业务故障) 此类问题通常可通过分批执行的方法解决,但是仍存在风险,例如: 研发写程序分批处理,如果分批的方式不当,例如直接用 LIMIT 进行分批,可能仍会锁表;若分批执 行的频率没有很好控制,会造成主备延迟过大。这些都会对数据库造成影响,进而影响业务。 DBA提取目标数据手动拆分:人工拆分非常繁琐,工作量大,且易出错,并且很难进行动态调整。 主要原理 1. 创建临时表:CREATE TABLE tmp_table_table LIKE table_name 2. 变更临时表结构: ALTER TABLE tmp_table_table XXXX 3. 全量拷贝数据:INSERT IGNORE INTO tmp_table_table (SELECT %s FROM table_name FORCE INDEX (%s) WHERE xxx 4. 增量数据Binlog同步: UPDATE/INSERT/DELETE tmp_table_name 5. 切换新旧表: RENAME TABLE table_name to old_tmp_table_table, tmp_table_name to table_name 适用场景 变更数据库表结构。 变更表的字符集、校验集,调整时区等。 规避Optimize Table操作回收表空间、降低碎片率时引起的锁表
阿里云数据管理DMS的无锁变更功能主要原理和适用场景介绍
来源:这里教程网
时间:2026-03-01 16:16:18
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 基于DataX的数据同步(上)-DataX介绍以及安装
基于DataX的数据同步(上)-DataX介绍以及安装
26-03-01 - 基于DataX的数据同步(下)-应用DataX进行数据同步
基于DataX的数据同步(下)-应用DataX进行数据同步
26-03-01 - CentOS 系统手动部署 MySQL 数据库
CentOS 系统手动部署 MySQL 数据库
26-03-01 - MySQL升级过程中的一些心得-2
MySQL升级过程中的一些心得-2
26-03-01 - MySQL一次没有报错的关闭
MySQL一次没有报错的关闭
26-03-01 - MySQL Case-max_allowed_packet过小是否会截取sql文本
- 2021年vivo互联网技术最受欢迎文章TOP25
2021年vivo互联网技术最受欢迎文章TOP25
26-03-01 - 前端开发MySQL 数据库之数据引擎
前端开发MySQL 数据库之数据引擎
26-03-01 - MySQL8升级遇到的各式各样问题
MySQL8升级遇到的各式各样问题
26-03-01 - MySQL锁分析
MySQL锁分析
26-03-01
