Online DDL

MySQL在线DDL特性提供了即时支持instant 、copy方式,还有原表in-place方式。有些过程中也允许并发DML。

语法:

ALTER TABLE tbl_name ,
alter_option: {...},
ALGORITHM [=] {DEFAULT | INSTANT | INPLACE | COPY}
LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}

为了避免在执行ALTER TABLE操作时表可读或不可写,可以在ALTER TABLE语句中指定一个子句,如果请求是并发级别且不可用,则操作立即停止。

 

常见问题:

  • 支持 INPLACE 算法的 DDL 不一定是 Online

从概念上来说,INPLACE 和 Online 是两个不同维度的事情。COPY 和 INPLACE 指的是 DDL 内部的执行逻辑,可以简单的理解成:COPY 是在 Server 层的操作,INPLACE 是在 InnoDB 层的操作。从是否允许并发DML来看,有两个基本结论,COPY 算法执行的 DDL 肯定不是 Online 的,INPLACE 算法执行的 DDL 不一定是 Online 的。

  • Online DDL有可能会锁表

MDL 锁是在 Server 层加的,表锁,行锁,GAP 锁在 InnoDB 层加的。所有的操作(不管是 DDL 还是 DML 还是查询语句)都需要先拿 Server 层的 MDL 锁,然后再去拿 InnoDB 层的某个需要的锁。一个 DDL 的基本过程是首先在开始进行 DDL 时,需要拿到对应表的 MDL X 锁,然后进行一系列的准备工作,然后将 MDL X 锁降级为 MDL S 锁,进行真正的 DDL 操作,最后再次将 MDL S 锁升级为 MDL X 锁,完成 DDL 操作,释放 MDL 锁,所以在真正执行 DDL 操作期间,确实是不会“锁表”的,但是如果在第一阶段拿 MDL X 锁时无法正常获取,那就可能真的会“锁表了”

posted @   complexlong  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示