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添加索引并不会出现锁表现象。

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

tidb在DDL语句方面的测试的更多相关文章

  1. Hibernate hbm2ddl.auto DDL语句 控制台输出的配置

    在开发中我们需要知道hbm2ddl.auto生成的SQL语句,来判断代码的正确性,现在记录配置的过程. Hibernate的DDL语句在控制台的输出配置: 一.在lib中确保只有下面的三个相关包:1) ...

  2. SQLDataSet中执行DDL语句

    在SQLDataSet中执行我们输入的DDL语句,并观察执行结果. 这里为了省输入的时间,从先输好的记事本中复制的SQL语句.效果图: ******************************** ...

  3. MySQL的DDL语句、DML语句与DCL语句

    背景:近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应用上占据了很大的市场份额,而 MySQL 正是开源数据库中的杰出代表.MySQL 数据库 ...

  4. 详解MySQL第一篇—MySQL简要介绍及DDL语句

    背景:近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应用上占据了很大的市场份额,而 MySQL 正是开源数据库中的杰出代表.MySQL 数据库 ...

  5. oracle 之 cursor:创建存储过程批量执行DDL语句

    说明:使用此过程可任意执行批量DDL语句,调用DDL查询语句时,注意转义字符,使用 ' 转义! 需求:批量删除以CUR_TEST开头的表,且有日志记录. 环境准备:建几张以CUR_TEST开头测试表. ...

  6. Oracle获取干净的建表DDL语句,不含其它存储、表空间、段属性

    早上一个同事资讯怎么获取到建表语句而且是不带存储那种SQL.Oracle自己提供了一个函数DBMS_METADATA.GET_DDL,但是获取到的建表语句含有存储.表空间.以及一些其他段的属性.如图: ...

  7. 数据库DDL语句书写规范

    数据库DDL语句书写规范 1.SQL语句编写说明编写SQL语句应遵循统一的规范,包括大小写.空格.换行.缩进等等,只有完全一样的SQL才能在数据库中共享,从而减少硬解析. 字段类型.长度:根据数据情况 ...

  8. oracle使用dbms_metadata包取得所有对象DDL语句

    当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metadata.get_ddl这个包来查看. dbms_metadata包中的get_ddl函数详细参数 GET_DDL函数返回创建 ...

  9. 利用dbms_metadata.get_ddl查看DDL语句

    http://www.cnblogs.com/aocle/archive/2011/10/13/2209790.html 当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metada ...

随机推荐

  1. Android快速实现二维码扫描--Zbar

    Android中二维码扫描的最常用库是zxing和zbar,上一篇<Android快速实现二维码扫描–Zxing>介绍了Zxing.这次说Zbar,Zbar速度极快,我就比较常用,项目地址 ...

  2. (原创)UML要点总结

    今天我们总结要点: 我们就从这张图慢慢讲. 一.类图部分 基础: 类图→长方形表示.类名在最上栏,下面是数据,第三栏是方法.其存在两种关系:关联和泛化 属性: 全形:  可见性  名:类型     重 ...

  3. 信号为E时,如何让语音识别脱“网”而出?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯教育云发表于云+社区专栏 一般没有网络时,语音识别是这样的 ▽ 而同等环境下,嵌入式语音识别,是这样的 ▽ 不仅可以帮您边说边识. ...

  4. 用pip安装python库下载timeout的解决办法

    我们直接用命令:pip install 库名,因网络太慢,导致下载超时~~~ 针对在安装Python库出现的超时问题---总结了如下两种解决方案: 其一:pip --default-timeout=1 ...

  5. 按值传递 vs. 按指针传递

    按值传递还是指针传递? 变量赋值有两种方式:按值传递.按"指针"传递(指针也常称为"引用").不同的编程语言赋值的方式不一样,例如Python是按"指 ...

  6. Python使用@property装饰类方法

    Python版本:3.5.2 假如我们有一个Student类,并在其中定义了一个score属性,但是score属性会被显露出去,没办法检查参数,导致成绩可以随意更改: stu = Student() ...

  7. 获取微信的access_tokey,处理json格式的数据

    #region 获取微信凭证 public string GetAccessToken(string wechat_id) { string accessToken = ""; D ...

  8. Oracle 连接到RMAN

    set oracle_sid=orcl rman connect target sys/password@orcl;

  9. LeetCode翻转矩阵后的得分-Python3<六>

    上一篇:LeetCode子域名访问计数-Python3.7<五> 题目:https://leetcode-cn.com/problems/score-after-flipping-matr ...

  10. 如何将一个HTML页面嵌套在另一个页面中

    一 在原页面嵌入其他页面 1.使用iframe框架 客户端页面嵌套可以使用iframe的方法,弊端是必须事先想好被嵌套的页面在首页中要占多大的位置. 如果被嵌套页面太大,超过事先定义的宽度或高度,则首 ...