一 简介:今天来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,不会阻塞事务
四 总结
1 对于针对主键和列的更改操作建议采用pt-osc操作

2 针对myisam的表操作

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

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

mysql 原理 ~ DDL之在线DDL的更多相关文章

  1. MySQL在线DDL gh-ost 使用说明

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

  2. mysql 5.6 在线 DDL

    原文链接地址:http://seanlook.com/2016/05/24/mysql-online-ddl-concept/ 做MySQL的都知道,数据库操作里面,DDL操作(比如CREATE,DR ...

  3. MySQL在线DDL工具 gh-ost

    一.简介 gh-ost基于 golang 语言,是 github 开源的一个 DDL 工具,是 GitHub's Online Schema Transmogrifier/Transfigurator ...

  4. [资料收集]MySQL在线DDL工具pt-online-schema-change

    MySQL在线DDL工具pt-online-schema-change pt-online-schema-change使用说明(未完待续) 官网

  5. 在mysql 5.6的环境下修改生产环境的表结构(在线ddl) ----工具pt-osc

    随着需求的变化越来越快,在线修改表结构变得越来越需要. 在mysql5.6以前,mysql的修改表结构操作会锁表,这样就会造成开发人员或者DBA修改表结构必须要等到凌晨流量谷值或者停服修改.这样必定会 ...

  6. Mysql在线DDL

    1.  Mysql各版本DDL方式 1.1 MysqlDDL演进 当mysql某个业务表上有未提交的活动事务的时候,你去执行在线DDL,这相当危险,直接会被卡住,show processlist里面会 ...

  7. mysql 5.6 原生Online DDL解析

    http://seanlook.com/2016/05/24/mysql-online-ddl-concept/ 做MySQL的都知道,数据库操作里面,DDL操作(比如CREATE,DROP,ALTE ...

  8. 使用 pt-online-schema-change 实现在线DDL

    问题背景 平时进行修改表的结构,更改字段,新增字段,更改字段名称一般都是通过ALTER TABLE  语法进行修改的.对于小表或者并发访问不是很大的情况是OK.但是如果是在线大表,那就很麻烦.由于表数 ...

  9. MySQL5.6在线DDL不锁表(在线添加字段)

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

随机推荐

  1. jmeter的介绍和使用二

    三. 1.http的请求默认值 当一个项目有多个模块,他们的host都是一致的,为了不重复的写host或者当某一天host变了,只需要修改一个地方就好.比如下面的两个请求,可以把host分离出来,所以 ...

  2. hdu 2973"YAPTCHA"(威尔逊定理)

    传送门 题意: 给出自然数 n,计算出 Sn 的值,其中 [ x ]表示不大于 x 的最大整数. 题解: 根据威尔逊定理,如果 p 为素数,那么 (p-1)! ≡ -1(mod p),即 (p-1)! ...

  3. 查询redis数据

    1.连接跳板机 2.跳板机连接服务器 3.服务器打开redis 4.查询redis数据

  4. (贪心 部分背包问题)悼念512汶川大地震遇难同胞——老人是真饿了 hdu2187

    悼念512汶川大地震遇难同胞——老人是真饿了 http://acm.hdu.edu.cn/showproblem.php?pid=2187 Time Limit: 1000/1000 MS (Java ...

  5. 使用SSH命令行传输文件到远程服务器

    以前一直在windows下用SSH Secure Shell连接远程服务器,它自带了一个可视化的文件传输工具,跟ftp差不多 但是它也存在一个缺陷,不支持编码的选择,遇到utf8就自动乱码了,另外ma ...

  6. 图论分支-Tarjan初步-点双连通分量

    上一次我们讲到了边双,这次我们来看点双. 说实话来说,点双比边双稍微复杂一些: 学完边双,我们先看一道题 第一问都不用说了吧,多余的道路,明显的割边. 是不是首先想到用边双,但是我们来看一个图: 有点 ...

  7. 深入浅出 JavaWeb:Servlet必会必知

    一.Web服务器 从事web开发的人,会很清楚一个东西叫HTTP服务器,比如JEE开发—Tomcat,Jetty,.NET开发—ISS等.HTTP服务器是使用 HTTP(超文本传输协议) 与客户机浏览 ...

  8. sqlserver修改计算机名称。

    SELECT @@SERVERNAME As [@@SERVERNAME], CAST(SERVERPROPERTY('MACHINENAME') AS VARCHAR(128)) + COALESC ...

  9. sql递归查询 根据Id查所有子结点

    Declare @Id Int Set @Id = 0; ---在此修改父节点 With RootNodeCTE(D_ID,D_FatherID,D_Name,lv) As ( Select D_ID ...

  10. PHP7 网络编程(三)孤儿进程与僵尸进程

    基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 当一个 ...