目录

  • 前言
  • 一、分类
  • 二、Copy
  • 三、Inplace
  • 四、Instant
  • 五、一些补充
  • 六、总结

前言

一天,一位许久未见的澳同学,一见面先不是打招呼,直接给我当面一问
澳同学问我:小涛小涛,我这一个表有1T的数据,这时我想给这个表加一个列,如果才能最大程度不影响业务呢?
此刻,我陷入了沉思,赶紧去学习学习

一、分类

在MySQL5.6版本之后,对于部分alter table,加入新的执行算法,可以进行DDL时,“并行”现有业务(DML操作)。
可以通过aLter table 时添加 ALGORITHM参数控制使用算法。

#例如这种写法
alter  table  t1 add a int ALGORITHM=?;

目前可以支持的主流算法有三种:
COPY —— MySQL 5.6之前非Online,都是执行这种算法
INPLACE —— MySQL 5.6出现的
INSTANT —— MySQL 8.0.12出现的

这时就有疑问了,这么多算法头都大了

别急,小涛同学这就来通俗易懂的解答一下这几种算法:
我们知道,把澳同学关进冰箱需要三步:打开、放入、关门

而DDL操作,在执行时,不管何种算法,都会经历三个阶段:准备阶段【prepare】、执行阶段【DDL】、提交阶段【commit】。不同之处是在三个阶段中分别作了不同的处理,下面咱们来好好聊聊。

二、Copy

一听名词就秒懂,单纯的拷贝忍者。

名词解释:指DDL时,会生成(临时)新表,将原表数据逐行拷贝到新表中,在此期间会阻塞DML,offline(离线的而非在线的)
例如执行此语句:
alter table t1 add age a int;三个阶段:准备、执行、提交。
准备:
1、对表加元数据共享锁,读取frm元数据(此时DDL不能并行,DML可以并行)
2、共享锁升级为排他锁;(此时DDL、DML都不能并行)
3、在Server层通过create like语句,创建临时表,Engine层也生成对应ibd、frm文件(8.0之后没.frm文件)执行:
1、修改临时表元数据(加列)
2、拷贝原表数据到临时表【最耗时,1T的数据一行一行copy】
3、删除原表及文件
4、重命令临时表及文件提交:
1、提交事务,释放锁


澳同学:这个好理解,但现在却不实用吧,因为在整个流程期间,都是加上锁的,此时既不能写入数据,也不能查询数据,容易造成数据库堵塞
卑微涛:嗯嗯,真聪明
澳同学:那怎么个Oline DDL啊,你是不是在忽悠我啊

【MySQL】Online DDL详解相关推荐

  1. Mysql加锁过程详解(3)-关于mysql 幻读理解

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  2. mysql status改变_mysql 配置详解mysql SHOW STATUS 详解

    1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一个新线程. back_log ...

  3. MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)

    MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过 ...

  4. Mysql存储引擎详解(MyISAM与InnoDB的区别)

    Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎     MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...

  5. MySQL的Limit详解(转载)

    MySQL的Limit详解 问题:数据库查询语句,如何只返回一部分数据? Top子句 TOP 子句用于规定要返回的记录的数目.对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 在SQL Se ...

  6. Mysql加锁过程详解(2)-关于mysql 幻读理解

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  7. 数据库mysql_row_MYSQL数据库mysql found_row()使用详解

    <MYSQL数据库mysql found_row()使用详解>要点: 本文介绍了MYSQL数据库mysql found_row()使用详解,希望对您有用.如果有疑问,可以联系我们. mys ...

  8. mysql 联合索引详解

    mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). ...

  9. MYSQL performance schema详解

    MYSQL performance schema详解 0.performance_schema的介绍 ​ MySQL的performance schema 用于监控MySQL server在一个较低级 ...

  10. shell编程系列23--shell操作数据库实战之mysql命令参数详解

    shell编程系列23--shell操作数据库实战之mysql命令参数详解mysql命令参数详解-u 用户名-p 用户密码-h 服务器ip地址-D 连接的数据库-N 不输出列信息-B 使用tab键代替 ...

最新文章

  1. Hibernate一对一关联映射配置
  2. 计算机课实验三,成都信息工程学院计算机网络课程实验三
  3. springboot使用jsp完成数据的页面展示
  4. Google 开源 ChromeOS.dev,在 ChromeOS 上构建应用更容易!
  5. import 和 export -- ES6
  6. android原生ios,Windows Phone的原生iOS/Android应用程序
  7. jquery获取表单对象
  8. 273. 整数转换英文表示
  9. codeforce 417D Cunning Gena (状压DP)
  10. Emitted value instead of an instance of Error-编译vue文件时出现的错误解决
  11. LC-3 子程序调用与模拟栈调用递归函数
  12. 一款恋爱星座男女配对微信小程序源码
  13. 基于java+SpringBoot+HTML+Mysql旅游网站设计与实现
  14. python tkinter编写界面,使用win32com操作excel获取数据生成截图后,wxpy登录微信,给租客发送房租(三)
  15. 自考计算机网络管理串讲笔记,自考“计算机网络技术”串讲
  16. specCPU 2006 备忘
  17. 华为云数据治理生产线DataArts,让“数据‘慧’说话”
  18. eth0和lo含义和虚拟IP技术
  19. 用python画树林_用python画樱树
  20. 服务器占用cpu启动就死机,CPU使用率高会不会造成死机?为何?

热门文章

  1. web前端如何才能成为架构师
  2. 解决win10自动锁屏问题的一个方法
  3. 线性方程组(四)- 矩阵方程
  4. 计算机作业实验报告dw感想,Dreamweaver实验报告.doc
  5. 国外免费图片素材站收集
  6. IT创业光技术好,谋略定位不好,你很可能会死得很惨,丢钱、丢客户、丢成果、丢商机、丢思路
  7. 【团队技术知识分享 一】技术分享规范指南
  8. 三种定位+堆叠+li小黑点变图片
  9. python排版_python排版
  10. 空间换时间,轻松提高性能100倍