MySQL四种能规避因数据库变更导致锁表问题的功能

更新时间:

概述

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表元数据锁限制。

适用于

  • 云数据库RDS MySQL版