一 简介:今天来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进行操