mysql5.6的online ddl功能测试

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: online DDL的前身是 innodb fast index creation(5.1和5.5), 5.6里对这个功能做了扩展: 很多alter table的操作绕开了 table copying,支持DML并发操作。


online DDL的前身是 innodb fast index creation(5.1和5.5), 5.6里对这个功能做了扩展:
很多alter table的操作绕开了 table copying,支持DML并发操作。


一、online ddl的支持测试:
1、主键的增删
主键添加:
支持online ddl,加主键过程中支持 并发的DML
主键删除:
不支持online ddl,删除主键过程需要copy table,导致DML被阻塞


2、索引的增删
1)普通索引
5.5使用新的逻辑(fast index creation),不再copy表,(参数old_alter_table),加快的索引的创建和删除,
                            但是会阻塞DML,可以select
5.6中创建和删除索引不再阻塞dml
2)unique索引
同上


3、字段的增删改
新增:
(alter table test add hehe2 int default 100)
5.5阻塞 DML,支持select
5.6支持并发DML
删除:
(alter table test drop hehe2)
5.5阻塞 DML,支持select
5.6支持并发DML
修改:
  只改字段名:
(alter table test change hehe2 hehe20 int default '100')
5.5阻塞 DML,支持select
5.6支持online ddl,并发DML
  修改字段类型:
(alter table test change hehe20 hehe2 varchar(100) default '100')
5.5阻塞 DML,支持select
5.6不再支持online ddl

 

http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html
中的Table 14.5列出了详细的online ddl支持的操作类型,
但是实际上并不需要记忆这么多:

二、新引入语法:
在5.6中,alter table增加了新的语法:
ALGORITHM [=] {DEFAULT|INPLACE|COPY}
LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
ALGORITHM:
INPLACE: 不copy table
COPY:     copy table
DEFAULT:

LOCK:
DEFAULT:    mysql自己选择锁定资源最少的方式
NONE:      支持select和DML
SHARED:   支持select,不支持DML
EXCLUSIVE:不支持select,不支持DML


可以借用这个新增语法测试是否alter table语句支持online DDL:
新建一个表结构一样的表,存储少量的数据:
root:3306:popo>alter table test change hehe2 hehe20 int default '100' ,LOCK=NONE;              
ERROR 1846 (0A000): LOCK=NONE is not supported. Reason: Cannot change column type INPLACE. Try LOCK=SHARED.
根据提示,这个字段类型修改的alter table不支持并发的DML操作

root:3306:popo>alter table test change hehe2 hehe20 int default 100,  ALGORITHM=inplace;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
同样 这个alter table 也需要copy table操作。


三、online ddl相关参数和原理:
innodb_online_alter_log_max_size
 online ddl的原理是,mysql把在ddl时间内的所有的 插入,更新和删除操作记录到一个日志文件,
然后再把这些增量数据应用到相应的表上(等表上的事务完全释放后),这个临时日志文件的上限值由
innodb_online_alter_log_max_size指定,每次扩展innodb_sort_buffer_size的大小 该参数如果太小,
有可能导致DDL失败,这期间所有的未提交的并发DML操作都会回滚;但是如果太大
会可能会导致后DDL操作最后锁定表的时间更长(锁定表,应用日志到表上)。
每一个变化的索引或者表都会分配一个。


参考:
http://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl.html
http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-examples.html

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
25天前
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
20 1
|
25天前
|
Java 关系型数据库 数据库连接
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
24 1
|
3月前
|
SQL 存储 关系型数据库
【MySQL】如何通过DDL去创建和修改员工信息表
【MySQL】如何通过DDL去创建和修改员工信息表
40 1
|
3月前
|
SQL 关系型数据库 MySQL
学习MySQL中DDL语句的修改字段与删除字段,删除表
学习MySQL中DDL语句的修改字段与删除字段,删除表
|
5月前
|
SQL 关系型数据库 MySQL
【MySQL入门到精通-黑马程序员】MySQL基础篇-SQL概述及DDL
(精度指数的所有位数;标度指小数点后数的位数) 字符串类型
60 0
|
1月前
|
SQL 存储 关系型数据库
【MySQL 数据库】1、MySQL 的 DDL、DML、DQL 语句
【MySQL 数据库】1、MySQL 的 DDL、DML、DQL 语句
50 0
|
1月前
|
监控 关系型数据库 MySQL
Flink CDC产品常见问题之使用3.0测试mysql到starrocks启动报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
2月前
|
关系型数据库 MySQL Java
Mysql专栏 - 线上调优与压力测试
Mysql专栏 - 线上调优与压力测试
85 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL数据库——DDL基本操作
MySQL数据库——DDL基本操作
|
3月前
|
SQL 关系型数据库 MySQL
MySQL操作数据表(DDL语句)
MySQL操作数据表(DDL语句)
41 1