千家信息网

mysql 5.6 在线DDL

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,online ddl主要包括3个阶段,prepare阶段,ddl执行阶段,commit阶段,rebuild方式比no-rebuild方式实质多了一个ddl执行阶段,prepare阶段和commit阶段
千家信息网最后更新 2026年10月31日mysql 5.6 在线DDL

online ddl主要包括3个阶段,prepare阶段,ddl执行阶段,commit阶段,rebuild方式比no-rebuild方式实质多了一个ddl执行阶段,prepare阶段和commit阶段类似。下面将主要介绍ddl执行过程中三个阶段的流程。

  • Prepare阶段:

  1. 创建新的临时frm文件(与InnoDB无关)

  2. 持有EXCLUSIVE-MDL锁,禁止读写

  3. 根据alter类型,确定执行方式(copy,online-rebuild,online-norebuild)
    假如是Add Index,则选择online-norebuild即INPLACE方式

  4. 更新数据字典的内存对象

  5. 分配row_log对象记录增量(仅rebuild类型需要)

  6. 生成新的临时ibd文件(仅rebuild类型需要)

ddl执行阶段:

  1. 降级EXCLUSIVE-MDL锁,允许读写

  2. 扫描old_table的聚集索引每一条记录rec

  3. 遍历新表的聚集索引和二级索引,逐一处理

  4. 根据rec构造对应的索引项

  5. 将构造索引项插入sort_buffer块排序

  6. 将sort_buffer块更新到新的索引上

  7. 记录ddl执行过程中产生的增量(仅rebuild类型需要)

  8. 重放row_log中的操作到新索引上(no-rebuild数据是在原表上更新的)

  9. 重放row_log间产生dml操作append到row_log最后一个Block

  • commit阶段:

  1. 当前Block为row_log最后一个时,禁止读写,升级到EXCLUSIVE-MDL锁

  2. 重做row_log中最后一部分增量

  3. 更新innodb的数据字典表

  4. 提交事务(刷事务的redo日志)

  5. 修改统计信息

  6. rename临时idb文件,frm文件

  7. 变更完成


阶段 索引 文件 方式 类型 更新 增量 数据 事务 字典 对象 过程 三个 信息 内存 实质 日志 是在 流程 中产 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 有格互联网科技 国智互联网科技 互联网科技有限公司经营范围 互联网科技会 疫情对互联网科技公司影响 互联网最新的科技有限公司 互联网女皇 腾讯科技 滨湖区互联网智能科技产品供应 互联网科技公司的市场部门 互联网和高科技公司 深圳前海聚择互联网科技有限公司 深圳国际航运科技和互联网 互联网时代科技改变生活 互联网科技项目计划书材料类 成都铂石互联网科技做什么的 华夏恒生科技与互联网科技 九思连强互联网电子科技有限公司 互联网时代科技型公司的机会 万物互联网智能科技 米泉互联网科技专业怎么样 壹账通互联网科技 科技创新互联网企业 互联网高科技企业 现代互联网科技股 黑科技 体验场景 互联网大会 互联网与数字科技关系 信承诺互联网科技有限公司 广州梦谷互联网科技有限公司领导 互联网时代科技型公司的机会 数字互联网科技有限公司
0