tidb在DDL语句方面的测试

Mysql与tidb测试数据为8000万行。mysql

一、修改一个字段的列名,好比将“ctime”修改成“cctime”。sql

Tidb测试:数据库

 

MySQL测试:app

 

二、同一属性之间切换,即修改一个字段的属性大小。好比将int类型修改成bigint类型性能

Tidb:测试

 

Mysql:大数据

 

MySQL是建立临时表的方式来加字段,所以这个时间花费已超过40分钟,因此中止了操做。spa

总结:同一个属性之间切换时,能够对比出来,tidb花费的时间是极少的,在8000万行的数据时依然能表现出极好的性能,可是同比之下MySQL的表现极差,花费时间太长。blog

三、不一样属性之间切换,即修改一个字段的属性为其余属性,好比将int类型修改成varchar类型索引

Tidb:

 

能够看出来tidb暂时不支持此种语法。

MySQL

 

MySQL是支持此语法的。

可是上面的这个例子中,test这个表只有一行数据,因此很快就修改了。若是对于大数据集下,好比co2这个表,有8000万行数据,那么此时MySQL在修改列属性花费的时间很是长。

 

总结:此时能够查看tidb的官方说明书。

 

四、上面的三个例子中,咱们修改的是非索引的列,在接下来的例子中,咱们修改一个索引列尝试一下,将trace_app_id修改成trace_app_idd。

 

Tidb:

 

MySQL:

 mysql修改字段时间过长,这里终止了

五、将trace_app_idd的属性范围修改大一些,好比将varchar(200)修改成varchar(300)。

Tidb:

 

MySQL:

  mysql修改字段时间过长,这里终止了

六、在原表基础上增长一个列。

Tidb:

 

MySQL:

 mysql修改字段时间过长,这里终止了

七、在原表基础上再次同时增长多个列:

Tidb:

 

能够看出来tidb不支持同时建立多个列,所以要建立多个列只能一个个列的来。

MySQL:

在MySQL中是能够同时建立多个列的,所以不作测试。

总结:在tidb中,ADD COLUMN 操做目前不支持同时建立多个列。

八、在原表基础上增长一个索引。

Tidb:

 

九、在原表基础上增长多个索引。

Tidb

 

MySQL:

在MySQL中是能够同时建立多个索引的,所以不作测试。

总结:在tidb中,ADD  INDEX 操做目前不支持同时建立多个索引。

 

十、删除一个列(此列是索引列):

Tidb:

 

MySQL:

在MySQL中,若是此列是索引列,也是能够直接删除此列的。

总结:在tidb中,要删除一个列,那么要先确认此列是否含有索引,若是不含索引,是能够直接删除的。若是含有索引,此列是不能直接删除。

十一、删除一个列,此列含有自增主键。

Tidb:

 

MySQL:

在MySQL中,是能够直接删除主键列的。

总结:在tidb中,若是删除的列含有主键,此列不能直接删除。

十二、添加复合索引。

Tidb:

 

MySQL:

实验时间已超过1个小时,因此就中止了测试。

 

------------------------------------------------------------------------------------------------------------------------------

接下来咱们测试在线DDL语句的影响。Tidb官方称tidb是支持在线DDL的。而MySQL这里是使用5.7.24版本,mysql官方也声明5.7版本开始支持了在线DDL。咱们使用压力测试来进行查看,测试数据为一个表:1000万行的数据。开启三个终端,分别负责:压力测试、DDL语句、show processlist。

一、首先测试tidb的改表语句。

咱们开启两个终端,一个终端负责压力测试。另一个终端负责修改建表语句。两个终端都是操做同一个数据库的同一张表。

在压力测试端,使用oltp脚本测试,以下:

 

在建表语句端,修改一个字段的属性:

 

咱们看到这个结果仍是比较可观的。过程当中基本没有锁表。并且压力测试的数据值也没有降低。

 

 

 

二、终端压力测试oltp继续进行。

另一端添加字段。

 

接下来查看mysql进程:

 

发现tidb在处理上并无锁表,所以正常业务状况下是能够进行在线DDL语句的。

三、删除字段

一个终端继续进行压力测试

二终端进行删除某列字段

 

三终端此时查看Mysql进程

 

 

四、删除索引

一个终端继续进行压力测试

二终端进行删除索引

 

三终端查看mysql进程状态

 

 

 

五、建立索引

一个终端继续进行压力测试

 

从结果上看基本对压力测试的结果影响不大,不过偶尔有如图所示的qps和tps异常下降的现象出现,而后又恢复正常。

二终端进行建立索引

 

三终端查看进程状态

从“lock”和“wait”关键字来看并无出现。

如今咱们查看一下修改语句:

 

这个我只是截取了一部份内容,从这里看出来没有锁表现象的出现,说明在正常业务状况下进行DDL添加索引并不会出现锁表现象。

 

下面这个是我测试时使用的脚本:

相关文章
相关标签/搜索