暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mysql Online DDL相关知识

原创 ¥uan 2022-06-17
585

Mysql Online DDL相关知识

Mysql执行ddl这样是包含如下3种模式。

1、COPY模式 ,是指DDL时,会生成(临时)新表,Mysql Server层,将原表数据逐行拷贝到新表中,在此期间会阻塞DML

2、INPLACE,无需拷贝全表数据到新表,但可能还是需要IN-PLACE方式,innodb引擎层生成临时文件。

     不考虑 INSTANT模式的情况下,online DDL一定是INPLACDE模式,但是INPLACE模式不一定是online DDL。

3、INSTANT,只需修改数据字典中的元数据,无需拷贝数据也无需重建整表,同样,也无需加排他MDL锁,原表数据也不受影响。

     整个DDL过程几乎是瞬间完成的,也不会阻塞DML。这个新特性是8.0.12引入的.

 

Mysql Online DDB对照表。

操作

Instant

8.0特性

In Place

Copy

可并行DML

只修改元数据

新增辅助索引

删除辅助索引

修改索引名

新增主键

删除主键

删除并同时新增主键

新增字段

是(追加式)

删除字段

修改字段数据类型

扩展VARCHAR列长度

新增STORED虚拟列

新增VIRTUAL虚拟列

转换表字符集

opitmize table

修改表名

 

 

下面是online DDL执行的步骤:

1. DDL 启动时拿 MDL(元数据) 写锁

2. 然后降级成 MDL 读锁  

3. 真正做 DDL(此过程中时间最长,不影响dml操作,ddl称为online的原因)

4. 升级成 MDL 写锁

5. 释放 MDL 锁

 

特别说明:

OlineDDL有一点是需要特别留意的是确保之前没有正在执行的长事务或者大查询,否则会造成DDL之后全部的dml全被阻塞住;

对此也进行了实验,进行了验证;并且之前工作中,也遇到过多次。

利用其他的工具,比如Pt-osc、Gh-ost的场景下,也需要留意,因为他们也涉及到修改表名,也需要MDL锁。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论