• tidb在DDL语句方面的测试


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

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

    Tidb测试:

     

    MySQL测试:

     

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

    Tidb:

     

    Mysql:

     

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

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

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

    Tidb:

     

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

    MySQL

     

    MySQL是支持此语法的。

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

     

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

     

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

    Tidb:

     

    MySQL:

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

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

    Tidb:

     

    MySQL:

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

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

    Tidb:

     

    MySQL:

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

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

    Tidb:

     

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

    MySQL:

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

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

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

    Tidb:

     

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

    Tidb

     

    MySQL:

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

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

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

    Tidb:

     

    MySQL:

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

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

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

    Tidb:

     

    MySQL:

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

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

    12、添加复合索引。

    Tidb:

     

    MySQL:

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

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

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

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

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

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

     

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

     

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

     

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

    另外一端添加字段。

     

    接下来查看mysql进程:

     

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

    3、删除字段

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

    二终端进行删除某列字段

     

    三终端此时查看Mysql进程

     

    4、删除索引

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

    二终端进行删除索引

     

    三终端查看mysql进程状态

     

    5、创建索引

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

     

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

    二终端进行创建索引

     

    三终端查看进程状态

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

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

     

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

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

  • 相关阅读:
    jenkins--部署项目
    jenkins--创建项目
    jenkins--安全配置
    jenkins--工具配置
    jenkins--系统配置
    11.17
    11.14
    11.13
    dfs
    10.31
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10299115.html
Copyright © 2020-2023  润新知