最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQL5.6在线DDL更改表测试

来源:动视网 责编:小采 时间:2020-11-09 10:14:44
文档

MySQL5.6在线DDL更改表测试

MySQL5.6在线DDL更改表测试:先在这里普及下基础知识:在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的:1、createtabletmpliket1(创建一个临时表)2、insertintotmpselec 先在这里普及下基础知识: 在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的
推荐度:
导读MySQL5.6在线DDL更改表测试:先在这里普及下基础知识:在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的:1、createtabletmpliket1(创建一个临时表)2、insertintotmpselec 先在这里普及下基础知识: 在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的


先在这里普及下基础知识:在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的: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万行的数据,数据大一些,可以看出效果来。

然后在会话一,执行:

  • alter table sbtest add name varchar(10) after pad;
  • 会话二,执行:

  • insert into sbtest values(1000,1,'abc','abc','abc');
  • 这时你会发现并没有锁表,顺利执行完毕。

    但在MySQL5.5里,空间,网站空间,这样的操作是会锁表的,如图所示:

    那么MySQL5.6 在线DDL就一定不锁表吗?我们再这样测试:

    在会话一:

  • select * from sbtest;
  • 故意执行一条大结果的查询,然后再执行删除刚才增加的字段name

  • alter table sbtest drop name;
  • 这时就会把表给锁了,空间,如图所示:

    也就是说,在执行alter table表时,对该表的增、删、改、查均不会锁表。而在这之前,该表有被访问时,需要等其执行完毕后,才可以执行alter table。

    所以在凌晨上线时,一定要观察下,此时此刻,是否有某个慢SQL对该表进行操作,以免改表时出现锁等待现象。

    参考手册:

    本文出自 “贺春旸的技术专栏” 博客,请务必保留此出处

    文档

    MySQL5.6在线DDL更改表测试

    MySQL5.6在线DDL更改表测试:先在这里普及下基础知识:在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的:1、createtabletmpliket1(创建一个临时表)2、insertintotmpselec 先在这里普及下基础知识: 在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的
    推荐度:
    标签: 修改 测试 mysql
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top