OceanBase开源版与TiDB对比测试报告

北京it爷们儿老贾

儿童节OceanBase宣布开源,开源世界又多了一个小伙伴儿。之前也有听闻OceanBase TPC-H 打榜的消息,很震撼,也很想亲自动手跑一下结果验证一下。随着OceanBase的开源,身边的朋友也一直跟我打听OB 与 TiDB 的差异。其实从架构设计到功能再到性能,这两款主流的分布式数据库还是有不少的差异,由于精力有限,今天先从 TPC-H 性能的角度入手做个对比测试。

OceanBase 测试环境

  • 版本:OceanBase V3.1.0

  • 硬件配置:

    节点CPU内存(GB)磁盘OB 集群角色
    server124 核 48 vCPU(Intel®️ Xeon®️ Silver 4214R CPU @ 2.40GHz)187NvmeOceanBase 数据库(/data1)
    server2同上同上同上OceanBase 数据库(/data1)
    server3同上同上同上OceanBase 数据库(/data1)
    server4同上同上同上ODP
  • 数据量:

    • 开始时使用 100G 数据,遇到疑似数据损坏 OB 集群无法启动的情况:
      1. Q4 长时间执行导致一个 OBServer 进程退出,重启集群无法恢复。 日志如下:

        [2021-06-06 02:20:11.919933] WARN  [STORAGE] get_partition (ob_partition_meta_redo_module.cpp:674) [424060][2723][Y0-0000000000000000] [lt=214] [dc=0] get pg key error(ret=-4225, pkey={tid:1099511627777, partition_id:0, part_cnt:1}, pg_key={tid:18446744073709551615, partition_id:-1, part_idx:268435455, subpart_idx:268435455})  
        
        
      2. 导入 100GB 数据之后做冷备份,启动集群报内存不足的错误,清理 Linux 系统 page cache 之后依然无法启动。

    • 翻阅 OB 官网发现有 10G 数据的 benchmark,最后决定采用 10G 数据,正好与官网披露的性能做个对比。(OB 官网 10G 数据 TPC-H 性能测试报告链接
  • 测试方法:调用 obclient 或者 MySQL 客户端执行 TPC-H 的 22条 查询语句, 一共跑两轮,第一轮为预热,采用第二轮的数据作为测试结果。

OceanBase TPC-H 测试结果

QueryOB 10G 预热后查询响应时间(秒)OB 10G 官网数据查询响应时间(秒)
q12.8213
q21.1683
q31.9025
q42.6324
q53.3716
q61.6414
q72.866
q83.0368
q96.5637
q101.8985
q110.6271
q121.4063
q131.2872
q140.4251
q151.2652
q160.752
q176.50818
q181.5543
q191.984
q205.94410
q213.2054
q220.8572

在这里插入图片描述

上图从 22 个 SQL 执行所花费的时间来看,这轮测试的结果明显优于 OB 官网发布的 benchmark,接近一半的指标都有 50% 左右的提升。OB 官网的测试采用了阿里云的 ECS,这次测试的硬件配置更胜一筹,跑出这样的结果也是有些小惊喜。

作为同样业界闻名的分布式HTAP数据库TiDB的性能表现如何呢?好奇心驱使下决定折腾一下TiDB 的 TiFlash 列存引擎用同样的硬件配置和数据量来测一下 TiDB 的 TPC-H 指标。

TiDB 测试环境

  • 版本: v5.0.1(支持 MPP)
  • 硬件复用 OB 测试所用的四台服务器,其中三台部署为 TiFlash 节点,另外一台混合部署 PD、TiDB 和 TiKV。
  • 数据量和测试方法与 OB 测试相同。

OceanBase 和 TiDB TPC-H 对比测试结果

QueryOB 10G 预热后查询响应时间(单位:秒)TiDB TiFlash 10G 预热后查询响应时间(单位:秒)
q12.820.82
q21.1680.42
q31.9020.43
q42.6320.37
q53.3710.61
q61.6410.12
q72.860.32
q83.0360.66
q96.5631.39
q101.8980.72
q110.6270.29
q121.4060.27
q131.2870.46
q140.4250.26
q151.2650.31
q160.750.29
q176.5080.78
q181.5540.94
q191.980.35
q205.9440.47
q213.2050.9
q220.8570.23

在这里插入图片描述

从上图的测试数据来看:TiDB TiFlash 启动 MPP 的情况下,所有 22 个 SQL 查询的响应时间都要好于OB ,所有 TPC-H 指标的性能都在 OB 的两倍以上,其中 query 7 更是达到了将近 10 倍。

总结和思考

  • 没有对比就没有伤害,OB 开源版本的 OLAP 性能和TiDB 的 列存引擎对比起来还有不足

    从这次测试的结果看,目前开源的 V3.1.0 版本 TPC-H 性能各项指标均不如 TiDB,个人猜想原因可能有二:开源版本与打榜 TPC-H 的版本可能存在一定的差异性;调优方面也许专业的OB DBA会有一些方法我们不知道。企业版没玩儿过,咱不妄加评论。

  • 测试过程的体验不太顺畅

    第一次下载和部署 OB,整个测试体验的过程不太流畅。一方面,头一次部署工具的熟悉程度不够,也从侧面说明部署工具的导航性有待加强;另一方面,过程中遇到问题,也无法找到相应的官方文档进行调优。

  • 使用TPC-C/TPC-H 评估 HTAP并不恰当,难免偏颇
    这次测试用到的 TPC-H 通常被用来衡量 OLAP 的性能,目前分布式数据库领域,大家都在热议的 HTAP(同时跑 OLTP 和 OLAP 的混合负载),显然不能用单一的 TPC-C 或者 TPC-H 指标来衡量。

    CH-benCHmark 是目前学术界广泛用来评估混合负载的基准测试模型。(CHbenCHmark官网 )计划下次有时间,设计一个混合负载的场景,用 CH-benCHmark 来对比一下 OB 和 TiDB 在 HTAP 场景下真实的性能表现。

后记

笔者是个多年混迹DB圈儿的老家伙,6年职业DBA,从业20年大部分工作是与数据和数据库打交道。老实说认识 OceanBase 比 TiDB 要早,OceanBase 第一次开源的时候我还在一家传统软件公司为金融行业客户提供解决方案。本想试一下这个传说中的神器,由于项目原因一直没时间,结果等有工夫的时候,OceanBase 从 github 上消失了。好像一个大家闺秀,惊鸿一瞥后又深藏闺中。所以这次一开源便尽早入手测试,颇有一种再遇女神赶紧搭讪的感觉,希望这次她能在俗世间呆的久一些。测试期间时不时出些小状况,给人的感觉是这姑娘系出名门,标志的很,不过性格好像不太好,时不时爆出点儿“error”,不过这也许是因为初次接触了解不够所致。至于本次测试报告,各位看官可以看做是专业票友的一次玩儿票,专业但不权威。数字是冷冰冰的,我更想谈谈我对OB和Tidb的一些主观感受。其实 OceanBase 这次开源让我想起了操作系统软件中的两个明星产品 Solaris 和 Linux。产品的先发优势由技术先发优势和市场先发优势组成。在200X年 Solaris 无疑具备技术先发优势和商业市场先发优势,但是在开源市场Linux先发优势和社区活跃度已根深蒂固。再来聊聊 OceanBase 和 TiDB 的开发技术栈。OB的技术栈是C++,TiDB的技术栈是 golang 和 rust,从我个人来讲更喜欢后者。除去各种语言特性以及开发效率和运行效率的权衡以外,新生语言更让人有探索的欲望。其实两个同领域的技术更喜欢哪一个是个很主观的问题。Oracle是当之无愧的数据库王者,我想这一点没人反对,随着开源软件的发展,陆续冒出来各种类型的数据库,不过这么多年过去了,你大爷还是你大爷。但是为啥国内一直嚷嚷着去O?除去中美关系和经济因素不谈,有时候仅仅就是因为审美疲劳了。开源社区里的NewSql玩儿家多了是好事儿,但贵在坚持。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐