设为首页 收藏本站
查看: 822|回复: 0

[经验分享] mysql5.6的online ddl功能测试

[复制链接]

尚未签到

发表于 2015-12-22 11:45:41 | 显示全部楼层 |阅读模式
  
  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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-154732-1-1.html 上篇帖子: MySQL Fabric使用介绍01——高可用性HA 下篇帖子: mysql安装 (yum 安装)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表