MySQL在线DDL的实现细节介绍

  在线DDL, MySQL的实现细节共分为三个阶段:
  准备阶段
  1.纳文创建临时件
  2.持有EXCLUSIVE-MDL锁,禁止读写
  3 .根据改变类型,确定执行方式(复制、online-rebuild online-norebuild)
  4.更新数据字典的内存对象
  5.分配row_log对象记录增量
  6.生成临时ibd文件
  
  ddl执行阶段
  1.降级EXCLUSIVE-MDL锁,允许读写
  2.扫描原表的聚簇索引每条记录
  3.遍历新表的聚簇索引和二级索引,逐一处理
  4.根据记录构造对应的索引项
  5.将构造索引项插入sort_buffer块
  6.将sort_buffer块插入新的索引
  7 .处理ddl执行过程中产生的增量(仅重建类型需要)
  
  提交阶段
  1.升级到EXCLUSIVE-MDL锁,禁止读写
  2.应用最后row_log中产的日志
  3.更新innodb的数据字典表
  4 .提交事务(刷事务的重做日志)
  5.修改统计信息
  6.重命名临时idb文件,纳文件
  7.变更完成

MySQL在线DDL的实现细节介绍