1 测试环境
3台ARM服务器,同时部署TiDB和OceanBase。
TiDB: v7.5.0社区版,kv cache 32G ,CPU 48核(tidb+tikv+pd,numa),普通ssd。
Oceanbase: 4.2.1.1社区版,租户内存128G,48核,普通ssd。
2 测试内容
以Oceanbase 4.2.1官网文档为基准测试内容,验证TiDB和Oceanbase的online ddl能力。Sysbench初始化一张200万数据表,根据测试内容不同设置为不同分区,使用12个线程进行oltp_read_write等DML操作的同时执行DDL,观察DDL执行与TPS情况。
Oceanbase online ddl 说明:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000252800
CREATE TABLE `sbtest1` ( `id` bigint(20) NOT NULL , `k` bigint(20) NOT NULL DEFAULT '0', `c` varchar(120) NOT NULL DEFAULT '', `pad` varchar(60) , PRIMARY KEY (`id`), KEY `k_1` (`k`) ) DEFAULT CHARSET='utf8' partition by range(id) ( partition p1 values less than(1000001),partition p2 values less than(2000001), partition p3 values less than(3000001),partition pmax values less than(maxvalue)); |
3 测试目的
1、 对tidb、oceanbase支持的online ddl进行验证对比。
2、 验证oceanbase 官网的offline ddl在tidb能否online。
4 测试结果
本次测试结果汇总如下,环境、版本差异可能会有不同结果,仅供参考。从测试结果看TiDB支持的online ddl操作类型更多,实际使用也更丝滑,对于仅数据字典修改的ddl操作ob的性能要优于tidb,tidb的执行时间更加稳定(可能和环境有关系)。OB在自增列和stored生成列上支持的操作比tidb多,对应分区表tidb支持更多灵活的ddl操作。
OB定义 |
操作 |
TiDB |
OceanBase |
备注 |
online | 增加索引 |
online,TPS降低约38%,15.02秒 |
online,TPS降低67%,29.5秒 |
|
删除索引 |
online,TPS正常,0.52秒 |
online,TPS正常,0.81秒 |
||
重命名索引 |
online,TPS正常,0.51秒 |
online,TPS正常,0.12秒 |
||
混合索引操作 |
online,TPS降低约40%,15.02秒 |
online,TPS正常,22.9秒 |
||
末尾加列 |
online,TPS正常,0.51秒 |
online,TPS正常,2.96秒 |
||
添加 VIRTUAL 列 |
online,添加后TPS降低约25%,0.51秒 |
online,TPS正常,0.15秒 |
||
删除 VIRTUAL 列 |
online,删除后TPS回升约25%,0.51秒 |
异常,TPS掉0,67.39秒 |
||
修改列为 NOT NULL |
online,TPS正常,1.29秒 |
online,TPS正常,0.125秒 |
||
修改列为 NULL |
online,TPS正常,0.51秒 |
online,TPS正常,0.2秒 |
||
设列默认值 |
online,TPS正常,0.51秒 |
online,TPS正常,0.14秒 |
||
删除列默认值 |
online,TPS正常,0.52秒 |
online,TPS正常,0.18秒 |
||
修改自增列值 |
online,TPS正常,0.51秒 |
online,TPS正常,0.19秒 |
||
重命名列 |
online,TPS正常,0.52秒 |
online,TPS正常,0.3秒 |
||
增加列类型长度或精度 |
online,TPS正常,0.51秒 |
异常,TPS掉0,55.8秒 |
||
混合列操作 |
online,TPS正常,2.29秒 |
异常,TPS掉0,54.7秒 |
有Offline操作则转为offline |
|
增加外键、CHECK/NOT NULL 约束 |
online,TPS正常,0.0秒 |
online,TPS正常,1.25秒 |
||
重命名表 |
表名改了,应用报错,如何online? |
|||
修改行格式 |
因架构差异,未测试 |
|||
修改块大小 |
因架构差异,未测试 | |||
修改压缩算法 |
因架构差异,未测试 | |||
优化表空间 |
因架构差异,未测试 | |||
添加分区 |
online,TPS正常,0.51秒 |
online,TPS正常,0.17秒 |
||
offline | 中间加列(BEFORE/AFTER/FIRST) |
online,TPS正常,0.51秒 |
offline,TPS掉0,28秒 |
|
重排列(BEFORE/AFTER/FIRST) |
online,TPS正常,0.52秒 |
offline,TPS掉0,56.7秒 |
||
添加自增列 |
不支持添加自增列,支持删除自增列属性 |
offline,TPS掉0,81秒 |
||
修改为自增列 |
不支持修改为自增列 |
online,TPS正常,14秒 |
||
修改列类型 |
部分online(字段类型限制),TPS正常,0.51秒 |
offline,TPS掉0,150秒 |
||
修改列为主键 |
聚簇表不支持修改,非聚簇表online |
offline,TPS掉0,31.6秒 |
ob社区版修改主键为drop\add方式。Tidb不能执行,drop/add分开执行 |
|
添加/删除 STORED 生成列 |
不支持添加store生成列,支持online删除store生成列,0.52秒 |
offline,TPS掉0,87秒(加)、50秒(删) |
|
|
删除列 |
online,TPS正常,0.52秒 |
offline,TPS掉0,58秒 |
|
|
混合列操作 |
online,TPS正常,2.29秒 |
异常,TPS掉0,54.7秒 |
|
|
添加/删除主键 |
聚簇表不支持,非聚簇表online |
offline,TPS掉0,193秒(加)、34秒(删) |
|
|
TRUNCATE 表 |
online,TPS正常,0.52秒 |
online,TPS掉4.3秒 |
|
|
转换字符集 |
online,TPS正常,0.51秒 |
online,TPS正常,0.11秒 |
utf8转utf8mb4 |
|
删除表 |
表删除了,应用报错,如何online? |
|||
修改分区规则 |
online,TPS降低约25%,162秒 |
offline,TPS掉0,30.2秒 |
tidb支持分区交换、转换、重组等更多操作 |
|
删除分区 |
online,TPS正常,0.51秒 |
online,TPS正常,0.86秒 |
||
TRUNCATE 分区 |
online,TPS正常,0.51秒 |
online,TPS正常,0.47秒 |
--------------------------
具体测试详情: https://asktug.com/t/topic/1019469 查看pdf文档
-------------------------