一 简介:今天来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的更多相关文章
-
MySQL在线DDL gh-ost 使用说明
背景: 作为一个DBA,大表的DDL的变更大部分都是使用Percona的pt-online-schema-change,本文说明下另一种工具gh-ost的使用:不依赖于触发器,是因为他是通过模拟从库, ...
-
mysql 5.6 在线 DDL
原文链接地址:http://seanlook.com/2016/05/24/mysql-online-ddl-concept/ 做MySQL的都知道,数据库操作里面,DDL操作(比如CREATE,DR ...
-
MySQL在线DDL工具 gh-ost
一.简介 gh-ost基于 golang 语言,是 github 开源的一个 DDL 工具,是 GitHub's Online Schema Transmogrifier/Transfigurator ...
-
[资料收集]MySQL在线DDL工具pt-online-schema-change
MySQL在线DDL工具pt-online-schema-change pt-online-schema-change使用说明(未完待续) 官网
-
在mysql 5.6的环境下修改生产环境的表结构(在线ddl) ----工具pt-osc
随着需求的变化越来越快,在线修改表结构变得越来越需要. 在mysql5.6以前,mysql的修改表结构操作会锁表,这样就会造成开发人员或者DBA修改表结构必须要等到凌晨流量谷值或者停服修改.这样必定会 ...
-
Mysql在线DDL
1. Mysql各版本DDL方式 1.1 MysqlDDL演进 当mysql某个业务表上有未提交的活动事务的时候,你去执行在线DDL,这相当危险,直接会被卡住,show processlist里面会 ...
-
mysql 5.6 原生Online DDL解析
http://seanlook.com/2016/05/24/mysql-online-ddl-concept/ 做MySQL的都知道,数据库操作里面,DDL操作(比如CREATE,DROP,ALTE ...
-
使用 pt-online-schema-change 实现在线DDL
问题背景 平时进行修改表的结构,更改字段,新增字段,更改字段名称一般都是通过ALTER TABLE 语法进行修改的.对于小表或者并发访问不是很大的情况是OK.但是如果是在线大表,那就很麻烦.由于表数 ...
-
MySQL5.6在线DDL不锁表(在线添加字段)
解答你也看一下MySQL5.6在线DDL不锁表,现在我有一张1亿的表,需要增加一个字段,假如我让你去增加这个字段,你应该注意什么,具体怎么操作? 操作如下:1.注意磁盘空间(临时表目录 参数 tmpd ...
随机推荐
-
高仿精仿手机版QQ空间应用源码
说明:本次QQ空间更新了以前非常基础的代码 更新内容一 更新了登陆界面二 增加了输入时密码时和登陆成功后播放音频的效果三 增加了导航条渐隐的效果(和真实QQ空间的导航条一样,首先透明,当tablev ...
-
VM虚拟机忘记密码
关掉虚拟机. VM->Settings,选中Hard Disk,在右边出现了Utilities的一个下拉栏,OK,点击它选择Map,这时弹出一个"Map Virtual Disk&qu ...
-
POJ 3450 Corporate Identity(KMP)
[题目链接] http://poj.org/problem?id=3450 [题目大意] 求k个字符串的最长公共子串,如果有多个答案,则输出字典序最小的. [题解] 我们对第一个串的每一个后缀和其余所 ...
-
ASP.NET - 网页重定向 Response.Redirect()
在网页中使用重定向,意思就是在网站中的某一个页面跳转到另一个页面. Response.Redirect(~/abc.aspx); 使用“~”的作用是可以从任意位置跳转. 如果没有“~”,那么跳转的时候 ...
-
postman 第3节 API请求和查看响应结果(转)
请求 postman支持很多请求类型,界面左侧可以看到请求类型:get.post.put.patch等,右侧是发送和保存按钮,下方是请求支持的认证方式.信息头.信息体.私有脚本和测试结果.下面我们介绍 ...
-
C#或unity中实现正弦函数
C#或unity中实现正弦函数 本类用于第一,需要绘制一条正弦曲线的朋友:第二,需要根据正弦曲线控制物体运动的朋友:里面都有注释,代码如下: unity中使用的代码: public class Cur ...
-
【codeforces contest 1119 F】Niyaz and Small Degrees
题目 描述 \(n\) 个点的树,每条边有一个边权: 对于一个 \(X\) ,求删去一些边后使得每个点的度数 \(d_i\) 均不超过 \(X\) 的最小代价: 你需要依次输出 \(X=0 \to n ...
-
golang的json数据解析
import ( "fmt" "time" "github.com/astaxie/beego" " ...
-
hdu 1695 GCD 【莫比乌斯函数】
题目大意:给你 a , b , c , d , k 五个值 (题目说明了 你可以认为 a=c=1) x 属于 [1,b] ,y属于[1,d] 让你求有多少对这样的 (x,y)满足gcd(x,y)= ...
-
管道pipe与dup结合使用,应用实例
管道的一种常见用法:在父进程创建子进程后向子进程传递参数.例如,一个应用软件有一个主进程和很多个不同子进程. 主进程创建子进程后,在子进程调用exec函数执行一个新程序前,通过管道给即将执行的程序传递 ...