tidb在DDL语句方面的测试

摘要:
MySQL和tidb测试数据为8000万行。Tidb测试:MySQL测试:2.在同一属性之间切换,即修改字段的属性大小。TidbMySQL:可以在MySQL中同时创建多个索引,因此不需要测试。Tidb:MySQL:测试已超过1小时,因此测试已停止。Tidb官方表示,它支持在线DDL。接下来,检查MySQL进程。发现在处理tidb时没有表锁,因此在线DDL语句可以在正常的业务条件下执行。

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

1、修改一个字段的列名,比如将“ctime”修改为“cctime”。

Tidb测试:

 tidb在DDL语句方面的测试第1张

MySQL测试:

 tidb在DDL语句方面的测试第2张

2、同一属性之间切换,即修改一个字段的属性大小。比如将int类型修改为bigint类型

Tidb:

 tidb在DDL语句方面的测试第3张

Mysql:

 tidb在DDL语句方面的测试第4张

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

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

3、不同属性之间切换,即修改一个字段的属性为其他属性,比如将int类型修改为varchar类型

Tidb:

 tidb在DDL语句方面的测试第5张

可以看出来tidb暂时不支持此种语法。

MySQL

 tidb在DDL语句方面的测试第6张

MySQL是支持此语法的。

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

 tidb在DDL语句方面的测试第7张

总结:此时可以查看tidb的官方说明书。

 tidb在DDL语句方面的测试第8张

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

Tidb:

 tidb在DDL语句方面的测试第9张

MySQL:

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

5、将trace_app_idd的属性范围修改大一些,比如将varchar(200)修改为varchar(300)。

Tidb:

 tidb在DDL语句方面的测试第10张

MySQL:

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

6、在原表基础上增加一个列。

Tidb:

 tidb在DDL语句方面的测试第11张

MySQL:

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

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

Tidb:

 tidb在DDL语句方面的测试第12张

可以看出来tidb不支持同时创建多个列,因此要创建多个列只能一个个列的来。

MySQL:

在MySQL中是可以同时创建多个列的,因此不做测试。

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

8、在原表基础上增加一个索引。

Tidb:

 tidb在DDL语句方面的测试第13张

9、在原表基础上增加多个索引。

Tidb

 tidb在DDL语句方面的测试第14张

MySQL:

在MySQL中是可以同时创建多个索引的,因此不做测试。

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

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

Tidb:

 tidb在DDL语句方面的测试第15张

MySQL:

在MySQL中,如果此列是索引列,也是可以直接删除此列的。

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

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

Tidb:

 tidb在DDL语句方面的测试第16张

MySQL:

在MySQL中,是可以直接删除主键列的。

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

12、添加复合索引。

Tidb:

 tidb在DDL语句方面的测试第17张

MySQL:

实验时间已超过1个小时,所以就停止了测试。

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

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

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

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

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

 tidb在DDL语句方面的测试第18张

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

 tidb在DDL语句方面的测试第19张

我们看到这个结果还是比较可观的。过程中基本没有锁表。而且压力测试的数据值也没有下降。

 tidb在DDL语句方面的测试第20张

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

另外一端添加字段。

 tidb在DDL语句方面的测试第21张

接下来查看mysql进程:

 tidb在DDL语句方面的测试第22张

发现tidb在处理上并没有锁表,因此正常业务情况下是可以进行在线DDL语句的。

3、删除字段

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

二终端进行删除某列字段

 tidb在DDL语句方面的测试第23张

三终端此时查看Mysql进程

 tidb在DDL语句方面的测试第24张

4、删除索引

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

二终端进行删除索引

 tidb在DDL语句方面的测试第25张

三终端查看mysql进程状态

 tidb在DDL语句方面的测试第26张

5、创建索引

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

 tidb在DDL语句方面的测试第27张

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

二终端进行创建索引

 tidb在DDL语句方面的测试第28张

三终端查看进程状态

tidb在DDL语句方面的测试第29张

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

现在我们查看一下修改语句:

 tidb在DDL语句方面的测试第30张

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

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

tidb在DDL语句方面的测试第31张

免责声明:文章转载自《tidb在DDL语句方面的测试》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何用沟通解决80%的工作问题?一个CEO的几条实用建议LoadRunner初级教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Asp.net Mvc 使用EF6 code first 方式连接MySQL总结

最近由于服务器变更为Linux系统.MsSql for Linux什么时候出来到生产环境使用还是要很长时间的.于是考虑使用Mysql数据库,ORM使用EF.于是先踩下坑顺便记录一下,有需要的tx可以参考下.当你考虑使用EF连接Mysql的时候肯定是已经在网上搜了一堆教程.网上教程基本都是使用控制台做演示.跟着一步步来姿势没错的话可能会正常运行,但项目中使用...

Linux下Mycat安装配置和使用

mysql安装下载mysql【百度云】tar -zxvf mysql-5.6.32-linux-glibc2.5-x86_64.tar.gz 解压把mysql文件夹移动到 /usr/local/ 下mv mysql-5.6.32-linux-glibc2.5-x86_64 /usr/local/mysql创建mysql用户和组 groupadd mysql...

MySQL查询获取行号rownum

MySQL中可以使用变量产生行号,下面是2个简单例子: 使用工具:MySQL Workbench 说明:表heyf_10中字段,empid(员工工号)、deptid(部门编号)、salary(薪资); rownum是自定义变量,表示行号。 对员工按照部门进行分组,分组后对相同部门的员工按照工资高低排序,并显示排序序号。 rownum:自定义变量,表示行号...

windows版influxDB安装与配置

最近实习的公司在做一个工业监控系统,虽然数据采集点并不算多但是数据量积累下来也非常大,使用mysql数据库进行数据存储和查询时很慢,所以让我调研一下时序数据库,通过调研和了解时序数据库在海量数据的读取和写出都比关系型数据库和NoSql快很多,有人做过mysql和influxDB对比,存储1000万条数据mysql要7分多钟,influxDB只需2分多钟,从...

Django使用MySql数据库

0. 使用 docker 启动MySQL数据库 docker run -d -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=sunk -p 3307:3306 --name test-mysql --restart always -v /home/ct/mysql1/data:/var/lib/mysql...

MySQL下载、安装、配置(5.7.19版本)

本人电脑win7 64位系统,就mysql5.7.19版本安装遇到的问题记录一下: 一:下载压缩包 1.从MySQL官网下载MySQL Community Server 5.7.19,此版本为免费版。 注:如果感觉在官网下载太慢,提供百度网盘分享http://pan.baidu.com/s/1jIvFjIu2.下载完成之后解压缩,打开之后文件夹如下:...