mysql 在线ddl_mysql 原理 ~ DDL之在线DDL

一 简介:今天来DDL的变革

二 DDL演化方式:

1 copy table : 1 创建临时表2 copy数据到临时表 3 rename进行交换 缺点 1 阻塞事务 2占用磁盘空间

2 inplace : 1 在线更改表,不会拷贝临时表 缺点 1 阻塞事务

3 online_ddl :1 在线更改表,不会拷贝临时表 优点 1 不会阻塞事务

因此MySQL最新版本中,InnoDB支持了所谓的Online方式DDL。与以上两种方式相比,online方式支持DDL时不仅可以读,还可以写,对于dba来说,这是一个非常棒的改进。

三 DDL 耗时排行

1 针对 索引的DDL操作

特点:耗时少,表的数据量大,也不会很长时间,(随着表数据量的增多,加索引的速度会变得越来越慢)

在线变更: 支持->inplace方式->不会阻塞事务

特殊情况:针对全文索引要特殊对待

2 针对 列的DDL操作(不包含主键)

特点:耗时长,表的数据量大,时间会非常长

在线变更: 支持

add column->inplace 方式->不会阻塞事务, 时间可能很长

delete column -> inplace 方式->不会阻塞事务, 时间可能很长

change->copy 方式->会阻塞事务 , 时间可能很长

设置 修改 column默认值->inplace 方式 ->不会阻塞事务,时间很快,直接修改frm文件

设置 colunm not null/null->inplace 方式->不会阻塞事务,时间可能很长

设置clounm current on update -> inplace 方式->不会阻塞事务,时间很短

drop column ->inplace 方式 ->不会阻塞事务,时间可能很长

3 针对主键的DDL操作

特点:耗时长,只针对特定场景进行操作

在线变更: 支持

add primary->inplace 方式->不会阻塞事务,时间可能很长

drop primary->copy 方式->会阻塞事务,时间可能很长

删除并添加主键->inplace 方式->不会阻塞事务,时间可能很长,而且必须在同一alter语句上

4 其他特殊操作

1 更改表的字符集 方式->copy,会阻塞事务,时间可能很长

2 整理表空间 方式->inplace,不会阻塞事务(alter table engine=innodb)

四 总结

1 对于针对主键和列的更改操作建议采用pt-osc操作

2 针对myisam的表操作

1 都需要copy to tmp table 这点要尤为注意,上面分析的都是innodb的操作

2 由于myisam也支持触发器,所以可以用pt-osc进行操作

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页