Go微服务精讲:Go-Zero全流程实战即时通讯(无密完结超清)
下载看水印
前面提到,ALGORITHM 可以指定 DDL 操作的算法,目前主要支持以下几种:
COPY 算法
INPLACE 算法
INSTANT 算法:MySQL 8.0.12 引入的新算法,目前只支持添加列等少量操作。它利用了 8.0 新的表结构设计,可以直接修改表的元数据,省去了重建原表的过程,从而极大地缩短了 DDL 语句的执行时间。对于其他类型的改表语句,默认使用 inplace 算法。关于 INSTANT 支持的场景可参考官方文档 [Online DDL Operations]:dev.mysql.com/doc/refman/…
DEFAULT:如果不指定 ALGORITHM,MySQL 会自行选择默认算法。它优先考虑 INSTANT,其次是 INPLACE,然后是 COPY。
以下是 MySQL 官网上给出的 Online DDL 对索引操作的支持情况:
OnlineDDL 的原理
以下是 Online DDL 的整体步骤,主要分为 Prepare 阶段、DDL 执行阶段以及 Commit 阶段。
Prepare 阶段:
创建临时 frm 文件。
加 EXCLUSIVE-MDL 锁,阻止读写操作。
根据 ALTER 类型,确定执行方式(copy/online-rebuild/online-norebuild)。需要注意,如果使用 copy 算法,则不是 Online DDL。
更新数据字典的内存对象。
分配 row_log 对象,记录 Online DDL 过程中增量的 DML。
生成新的临时 idb 文件。
领取专属 10元无门槛券
私享最新 技术干货