MySQL5.6在线DDL更改表测试
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL5.6在线DDL更改表测试,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1500字,纯文字阅读大概需要3分钟。
内容图文
先在这里普及下基础知识:在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的:1、createtabletmpliket1(创建一个临时表)2、insertintotmpselec
先在这里普及下基础知识:
在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的:
1、create table tmp like t1(创建一个临时表)
2、insert into tmp select * from t1(一行行的把原表数据拷贝到临时表里,且更新索引)
3、drop table t1;rename table tmp to t1(删除原表并把临时表改名为原表t1)
在这个过程中会对t1表加S锁(共享锁),所以这个代价是很高的。
而在MySQL5.6里,对其进行了优化,当会话一增加字段时,其他会话增,删,改,查,均不受影响,不会锁表。
比如这样测试,用Sysbench生成一张1000万行的数据,数据大一些,可以看出效果来。
然后在会话一,执行:
会话二,执行:
这时你会发现并没有锁表,顺利执行完毕。
但在MySQL5.5里,香港空间,网站空间,这样的操作是会锁表的,如图所示:
那么MySQL5.6 在线DDL就一定不锁表吗?我们再这样测试:
在会话一:
故意执行一条大结果的查询,然后再执行删除刚才增加的字段name
这时就会把表给锁了,香港空间,如图所示:
也就是说,在执行alter table表时,对该表的增、删、改、查均不会锁表。而在这之前,该表有被访问时,需要等其执行完毕后,才可以执行alter table。
所以在凌晨上线时,一定要观察下,此时此刻,是否有某个慢SQL对该表进行操作,以免改表时出现锁等待现象。
参考手册:
本文出自 “贺春旸的技术专栏” 博客,请务必保留此出处
内容总结
以上是互联网集市为您收集整理的MySQL5.6在线DDL更改表测试全部内容,希望文章能够帮你解决MySQL5.6在线DDL更改表测试所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。