MySQL5.6 在线DDL更改表测试
程序员文章站
2022-05-05 12:18:09
...
先在这里普及下基础知识:在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的: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万行的数据,数据大一些,可以看出效果来。
然后在会话一,执行:
会话二,执行: