概述
MySQL在大数据量的情况下进行结构变更(增加字段、修改字段属性、增加索引、修改索引等),需要考虑锁表的风险,锁表可能导致业务无法正常写入。本文主要介绍四种能较好地规避因数据库变更导致锁表问题的功能。
详细信息
功能
|
优点
|
缺点
|
参考文档
|
DMS无锁结构变更(推荐) |
- 相比较数据库原生,DMS无锁结构变更支持控制变更的执行速率,可避免数据库主备链路延迟,对数据库性能影响更小,并支持多种原生OnlineDDL执行时会锁表的场景。
- 相比较PT-Online、OSC等其它工具,DMS无锁结构变更不依赖于触发器,且异步执行时对数据库的影响非常小,可随时安全中断。
- DMS无锁结构变更和DTS同步工具兼容性好,变更的表中如有DTS表级别的复制链路,使用DMS无锁结构变更不会导致DTS复制中断。
说明:必须在2020年02月14日后重启过DTS复制链路。
|
在执行无锁结构变更时,主键或唯一键将用于全量拷表分段操作及后续增量更新的依据。
- 如果表上仅有主键:在执行变更期间,不能更新(UPDATE)主键,否则将导致任务失败并退出。
- 如果表上没有主键,有唯一键:在执行变更期间,不能更新(UPDATE)唯一键,否则将导致任务失败并退出。
- 如果表上没有主键和唯一键:请在实例上先添加主键或唯一键后,重新提交无锁结构更变任务。
|
详情请参见无锁结构变更。 |
Online DDL
|
- 大部分操作速度快。
- 大部分操作支持并发DML。
- 资源充足且支持并发DML场景下对当前实例影响较小。
|
- 会出现日志空间不足问题。
- 会出现“Duplicated Key”错误。
- 容易导致只读实例复制延迟。
- 部分操作不支持并发DML。
- 无法暂停。
- 受MDL表元数据锁限制。
|
|
PT-OSC
|
- 支持并发DML。
- 支持避免Slave复制延迟超过指定阈值。
- 支持避免执行过程对实例负载超过指定阈值。
|
- 速度慢,影响大
- 源表不支持Trigger。
- 源表必须定义主键或唯一键。
- Trigger对绑定的事务引入新表上的锁竞争。
- 受MDL表元数据锁限制。
|
|
GH-OST
|
- 性能影响小。
- 支持并发DML。
- 可以暂停,参数支持动态调整。
- 可以决定切换时间点,行为可控。
|
- 源表不支持外键、Trigger触发器。
- 源表不支持MySQL 5.7 JSON类型。
- 源表必须定义主键或唯一键(不包含空值)。
- 不支持忽略大小写后,存在与源表的同名表。
- 受MDL表元数据锁限制。
|
|
适用于