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

转载于:https://www.cnblogs.com/danhuangpai/p/10109047.html

mysql 原理 ~ DDL之在线DDL相关推荐

  1. mysql gh 划线_MySQL在线DDL gh-ost 使用说明

    3)使用说明:条件是操作的MySQL上需要的binlog模式是ROW.如果在一个从上测试也必须是ROW模式,还要开启log_slave_updates.根据上面的参数说明按照需求进行调整. 环境:主库 ...

  2. [MySQL] 在线 DDL 工具 gh-ost 原理简介

    一.简介 gh-ost: github 提供的针对 MySQL 无触发器式在线架构迁移解决方案. 二.原理 目前的在线架构变更工具都使用了类似的方式:创建一个和源表一样的临时表,在临时表执行 DDL ...

  3. mysql+不锁表添加字段_MySQL5.6在线DDL不锁表(在线添加字段)

    解答你也看一下 MySQL5.6在线DDL不锁表,现在我有一张1亿的表,需要增加一个字段,假如我让你去增加这个字段,你应该注意什么,具体怎么操作? 操作如下: 1.注意磁盘空间(临时表目录 参数 tm ...

  4. mysql ddl脚本_MySQL在线DDL gh-ost使用总结

    背景: 作为一个DBA,大表的DDL的变更大部分都是使用Percona的pt-online-schema-change,本文说明下另一种工具gh-ost的使用:不依赖于触发器,是因为他是通过模拟从库, ...

  5. 【MySQL运维】使用gh-ost工具实现大表在线DDL变更

    一.gh-ost介绍 作为MySQL DBA都会面临这样一个问题,就是当对大表(10G以上)进行DDL变更时会有长时间锁表问题,影响业务可持续性.目前解决这个问题的方案一个较为通用的使用Percona ...

  6. mysql gh 划线,gh-ost:在线DDL修改MySQL表结构工具

    在之前,我分享过一次pt-online-schema-change在线DDL的工具实践记录,在实际使用过程中,发现部门的很多老系统大量使用了触发器,从而无法使用这个工具,非常遗憾!导致很多DDL变更都 ...

  7. mysql online ddl和pt_online ddl与pt-osc详解

    Ⅰ.背景 优化sql的过程中发现表上少一个索引,直接加一个?会不会hang住?不加?sql又跑不好,由此引出一个问题--ddl操作怎么做? Ⅱ.闲扯三两句 5.6版本之前的MySQL创建索引不支持on ...

  8. mysql ddl 进度_MySQL DDL详情揭露

    MySQL中DDL语句,即数据定义语言,用于创建.删除.修改.库或表结构,对数据库或表的结构操作.常见的有create,alter,drop等.这类语句通常会耗费很大代价,特别是对于大表做表结构变更. ...

  9. ddl mysql_mysql 5.6 在线 DDL

    做MySQL的都知道,数据库操作里面,DDL操作(比如CREATE,DROP,ALTER等)代价是非常高的,特别是在单表上千万的情况下,加个索引或改个列类型,就有可能堵塞整个表的读写. 然后 mysq ...

最新文章

  1. missing template arguments before异常解决
  2. WPF and Silverlight 学习笔记(十八):WPF样式(Style)与模板(Template)
  3. python random
  4. boost::mpl模块实现index_of相关的测试程序
  5. Object_id用法
  6. 伺服电机三环控制系统 一
  7. 关于我在1024程序员节还在焊板子这件事儿
  8. 腾讯网易音乐版权之争,拼的是什么?
  9. 替换Android中VM 加载动态库方式
  10. linux ftp命令参数全集
  11. WPF 自己动手来做安装卸载程序
  12. Hadoop 权威指南 第四版 中文目录
  13. Unity3d Google Play内购尝试客户端坑记
  14. 为什么Windows的文件名不能超过255个英文字符,求解答
  15. ABP 6.0.0-rc.1的新特性
  16. 卸载安装Ubuntu18.04双系统、ROS+装机
  17. 如何升级展锐RM500U模组的5GCPE固件
  18. 在什么情况下需要进行开眼角修复的手术
  19. SSM 实战项目遇到的问题
  20. 2020-SIGIR- Lightgcn: Simplifying and powering graph convolution network for recommendation

热门文章

  1. Docker 学习6 Docker存储卷
  2. doT.js-doT模板方便快捷的组织页面DOM
  3. Google DeepMind 声称在合成语音领域取得突破
  4. Leetcode PHP题解--D14 561. Array Partition I
  5. 关于数据取舍问题的一个实例
  6. JSON数据格式介绍
  7. tungsten开机启动及进程开启停止
  8. 配置EXCHANGE服务器
  9. Asp.net基础概念之 HttpModule
  10. python学习干货教程(5):#!/usr/bin/python