加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

浅谈DDL技术解密

发布时间:2019-09-19 05:37:17 所属栏目:编程 来源:张松然
导读:起首,用过数据库的小搭档们(本文以 MySQL InnoDB 为例)都知道,MySQL 不止有增编削数据操纵(DML),尚有改表布局的操纵(DDL),当新增进字段等修改表布局时,就必要举办 DDL 操纵。然则,假如对一个存储了上百万乃至上千上万的数据表举办 DDL 操纵,数据库

Online DDL 实现进程首要包罗三个阶段:Initialization 阶段, Execution 阶段,Commit Table Definition 阶段。我们看下官方给出的内容(MySQL 8.0):

浅谈DDL技能解密

(引自:https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-performance.html)

我们具体描写下这三个进程的进程:

(1) Initialization

  • 建设 frm 姑且文件
  • 持有EXCLUSIVE_MDL锁,榨取读写
  • 按照 ALTER 操纵,确定执行进程(COPY,Online-Rebuilds,Online-No-Rebuilds)
  • 更新数据字典的内存工具
  • 如果必要 Rebuilds,分派 row_log 工具记录增量
  • 如果必要 Rebuilds,新建 ibd 姑且文件

(2) Execution(假如仅修改 MetaData,则无此部操纵)

  • 低落EXCLUSIVE-MDL锁,应承读写(COPY 仅应承读)
  • 记录执行时代发生的 DML 操纵到 row_log(仅 Rebuilds 必要)
  • 扫描老表的聚积索引中每一笔记录 record
  • 遍历新表的聚积索引和二级索引,一一处理赏罚
  • 按照 record 结构对应的索引项
  • 将结构的索引项插入 sort_buffer 块中
  • 将 sort_buffer 块插入新的索引
  • 将 row_log 中的记录应用到新姑且表,应用到最后一个 Block

(3) Commit Table Definition

  • 进级到EXECLUSIVE-MDL锁,榨取读写
  • 重做 row_log 中最后一部门增量
  • 更新 InnoDB 的数据字典
  • 提交事宜,写 InnoDB redo 日记
  • 修改统计信息
  • Rename 姑且的 ibd 和 frm 文件
  • DDL 执行改观

我领略,Online DDL 中的 COPY 和 INPLACE 的区别在于有没有原地,COPY 会将数据从 InnoDB 存储层 copy 到 Server 层,而 INPLACE 不会;而 INPLACE 中的 Rebuilds 和 No-Rebuils 的区别在于,有没有重建表。

PT-Online-Schema-Change(PT-OSC)

全称 Percona Toolkit Online Schema Change,个中 Percona Toolkit 源自 Maatkit 和 Aspersa 器材,这两个器材是打点 MySQL 最著名的器材,但 Maatkit 已经不维护了,所有合并到 Percona Toolkit。Percona Toolkit 是一组高级的呼吁行器材,用来打点 MySQL 和体系使命。

PT-OSC(pt-online-schema-change)器材特点与上风是支持并发 DML 操纵。

浅谈DDL技能解密

GitHub’s Online Schema Transformer(GH-OST)

GH-OST 是 GitHub 的在线表界说转换器,与 PT-OSC 的最大区别,在于 GH-OOST 的无触发器计划。

浅谈DDL技能解密

至此,我们比拟下 Online DDL、PT-OSC 和 GH-OST 的优弱点:

浅谈DDL技能解密

(引自:吴夏《在线DDL道理、比拟说明和实践》)

总结

传统的 DDL,大都的 ALTER TABLE 操纵是通过建设一个满意需求的新表,之后拷贝数据到新表,在用新表替代老表,整个进程会加锁,不支持并发 DML。在 MySQL 5.5 版本中,以 InnoDB Plugin 方法,优化了新增和删除索引的操纵,停止了这种数据 copy 的开销,呈现了 FIC。在 MySQL 5.6 开始加强了对各类 ALTER TABLE 操纵支持,停止数据 copy 的开销,同时应承在 DDL 举办中,并发执行 DML 操纵。在 MySQL 5.7 实现了 ALTER TABLE RENAME INDEX 操纵,即支持在线的索引重定名,这种特征的综合,即 ONLINE DDL。PT-OST 通过改革原生 DDL 的方法,实现不锁表的在线修改表布局。

【本文是51CTO专栏作者张开涛的原创文章,作者微信公家号:开涛的博客,id:kaitao-1234567】

戳这里,看该作者更多好文

【编辑保举】

  1. 怎样停止回表查询?什么是索引包围? | 1分钟MySQL优化系列
  2. 数据库软件架构,到底要计划些什么?
  3. 内存KV缓存/数据库,可以选择它? | 1分钟系列
  4. 亿级流量高并发下,缓存与数据库纷歧致,咋办?
  5. 领略MySQL锁和事宜,看这篇怎样?
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读