【MySQL】Online DDL详解
目录
- 前言
- 一、分类
- 二、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详解相关推荐
- Mysql加锁过程详解(3)-关于mysql 幻读理解
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- mysql status改变_mysql 配置详解mysql SHOW STATUS 详解
1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一个新线程. back_log ...
- MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)
MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过 ...
- Mysql存储引擎详解(MyISAM与InnoDB的区别)
Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎 MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...
- MySQL的Limit详解(转载)
MySQL的Limit详解 问题:数据库查询语句,如何只返回一部分数据? Top子句 TOP 子句用于规定要返回的记录的数目.对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 在SQL Se ...
- Mysql加锁过程详解(2)-关于mysql 幻读理解
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- 数据库mysql_row_MYSQL数据库mysql found_row()使用详解
<MYSQL数据库mysql found_row()使用详解>要点: 本文介绍了MYSQL数据库mysql found_row()使用详解,希望对您有用.如果有疑问,可以联系我们. mys ...
- mysql 联合索引详解
mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). ...
- MYSQL performance schema详解
MYSQL performance schema详解 0.performance_schema的介绍 MySQL的performance schema 用于监控MySQL server在一个较低级 ...
- shell编程系列23--shell操作数据库实战之mysql命令参数详解
shell编程系列23--shell操作数据库实战之mysql命令参数详解mysql命令参数详解-u 用户名-p 用户密码-h 服务器ip地址-D 连接的数据库-N 不输出列信息-B 使用tab键代替 ...
最新文章
- Hibernate一对一关联映射配置
- 计算机课实验三,成都信息工程学院计算机网络课程实验三
- springboot使用jsp完成数据的页面展示
- Google 开源 ChromeOS.dev,在 ChromeOS 上构建应用更容易!
- import 和 export -- ES6
- android原生ios,Windows Phone的原生iOS/Android应用程序
- jquery获取表单对象
- 273. 整数转换英文表示
- codeforce 417D Cunning Gena (状压DP)
- Emitted value instead of an instance of Error-编译vue文件时出现的错误解决
- LC-3 子程序调用与模拟栈调用递归函数
- 一款恋爱星座男女配对微信小程序源码
- 基于java+SpringBoot+HTML+Mysql旅游网站设计与实现
- python tkinter编写界面,使用win32com操作excel获取数据生成截图后,wxpy登录微信,给租客发送房租(三)
- 自考计算机网络管理串讲笔记,自考“计算机网络技术”串讲
- specCPU 2006 备忘
- 华为云数据治理生产线DataArts,让“数据‘慧’说话”
- eth0和lo含义和虚拟IP技术
- 用python画树林_用python画樱树
- 服务器占用cpu启动就死机,CPU使用率高会不会造成死机?为何?