AI Agent智能应用从0到1定制开发(完结无秘)
下载看水印
Execute 阶段:
降级 EXCLUSIVE-MDL 锁为 SHARED-MDL 锁,允许读写操作。
扫描原表聚集索引的每一条记录。
遍历新表的聚集索引和二级索引,逐一处理。
根据原表中的记录构造对应的索引项。
将构造的索引项插入 sort_buffer 块排序。
将 sort_buffer 块更新到新表的索引上。
记录 Online DDL 执行过程中产生的增量(online-rebuild)。
重放 row_log 中的操作到新表的索引上(online-not-rebuild 数据是在原表上更新)。
重放 row_log 中的 DML 操作到新表的数据行上。
Commit 阶段:
升级到 EXCLUSIVE-MDL 锁,阻止读写操作。
重做 row_log 中最后一部分增量。
更新 InnoDB 的数据字典表。
提交事务,写 redo log。
修改统计信息。
重命名临时 ibd 文件,frm 文件。
变更完成,释放 EXCLUSIVE-MDL 锁。
尽管 Prepare 阶段和 Commit 阶段也加了 EXCLUSIVE-MDL 锁,但操作非常轻量,因此耗时较低。Execute 阶段允许读写操作,并通过 row_log 记录期间的变更数据记录,最终应用这些变更到新表中,从而实现 Online DDL 的效果。
领取专属 10元无门槛券
私享最新 技术干货