zoukankan      html  css  js  c++  java
  • 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进行操作

  • 相关阅读:
    sql语句
    CSS笔记
    mysql与oracle区别
    ajax请求aspx
    列表简单排序
    列表删除元素
    正则表达式简介
    创建列表
    动态串 StringBuilder
    StrinBuilder 追加 ,插入,删除,和替换操作
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/10109047.html
Copyright © 2011-2022 走看看