速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

蚂蚁金服 OceanBase 挑战 TPCC | 测试流程解析

  • 2019-10-21
  • 本文字数:4282 字

    阅读完需:约 14 分钟

蚂蚁金服OceanBase挑战TPCC | 测试流程解析

众所周知,TPC 组织是当今国际数据库领域公认最权威的测试和评价组织,它成立的初衷就是构建最好的测试标准以及制定针对这些标准最优的审计和监测流程。数据库界的天皇巨星 Jim Gray 曾在 1985 年提出了针对事务处理能力的评价标准 DebitCredit,而 1988 年 TPC 组织成立伊始,就基于这个标准提出了 TPC 组织第一个针对 OLTP 应用的测试标准 TPC-A。但随着时代发展,TPC-A 已经慢慢无法完全体现真实应用场景,此时 TPC-C 肩负重任应运而生,接下来也一直是 TPC 组织最核心同时也是关系数据库领域最顶级的测试标准。TPC-C 标准比 TPC-A 更加复杂,压力负载模型是 16 位一线工业产业界学者一起参与制定,随着时间推移测试标准也一直在保持修订,所以其模拟大型在线商超的测试模型时至今日也仍不过时,越来越能找到和当前大型 B2C 电商网站的共通之处。


有机会挑战 TPC-C 测试相信是所有数据库内核开发人员的梦想,但 TPC-C 测试标准非常复杂,1992 年 7 月发布以来到现在已经是 v5.11.0 版本,仅 PDF 就 132 页,如果不是铁杆粉丝估计很少有人会认真通读完这个标准。这次 OceanBase 创造 TPC-C 记录引起了大家的广泛关注,但它也只是这个测试标准里体现跑分的一个评价项 MQTh(最大有效吞吐量),隐藏在跑分下面的是 TPC-C 标准对被测数据库无数细致入微的测试验证和评价项,而正是这些才让这个标准在关系数据库领域如此权威,同时也是国产数据库之前很难入场的一大原因。


由于这是国产数据库同时也是分布式数据库第一次冲击这个榜单,为了完成这次挑战,OceanBase 团队前后准备时间超过一年,仅审计认证过程就耗时约半年,除了数据库自身性能优化同时还有大量的稳定性、合规要求相关工作,6088w tpmC 其实也只是整个测试结果中一小个展示项而已。

前期准备

作为基于 LSM-Tree、多副本 paxos 强一致的新型分布式关系数据库,如何进行 TPC-C 测试,有哪些注意事项,什么时候该做什么步骤等等诸多问题,在审计刚启动时我们无处咨询也没有任何可借鉴的资料。TPC-C 测试首先需要找到官方唯一认证的审计员来对测试进行审计监察,但面对 OceanBase 这样一个全新架构的关系数据库时,他们其实也有着诸多和我们类似的疑惑和问题,因此他们对这次 OceanBase 的审计也相当重视,全世界仅有的三个审计员这次就有两个参与到测试审计工作中。


两位审计员其中一位还是 TPC-C 标准原作者之一,他们对整个测试流程的要求异常细致和严苛,起初对待 OceanBase 还持有很大的怀疑态度,和审计员们漫长的邮件以及现场沟通过程也异常艰辛,但这也帮助我们始终坚持用规范中最严格的标准来针对每个测试子项,最终也赢得了审计员们充分的信任,审计员甚至在理解了 OceanBase 架构后帮助我们提出了多个问题解决思路。另外通过这次测试,OceanBase 也给 TPC-C 标准带来了很多新鲜的概念和测试方案。


  • 如何在 OceanBase 特有的 Incremental 数据带上后续的 Major Compaction 机制下去做数据存储的审计;

  • 如何在全部使用云服务器的测试系统中进行 Durability 测试;

  • 分布式数据库在性能压测等测试中应当如何去评估和监控 checkpoint;

测试系统

目前市面上基本找不到一个能够开箱即用的符合 TPC-C 标准的测试工具。以目前各个厂商 PoC 环境最常遇到的 benchmarksql 为例,可以说只是模拟 TPC-C 压力模型的压测工具,连最基本的数据导入都不合规,大量的字符串生成未保证全局随机,缺乏压测阶段最基本的 think time、keying time 这些基本配置导致极小的数据量就能跑出很高的 tpmC,最关键的是它将测试模型大大简化为工具直连 DB 测试,完全没有遵守 TPC-C 测试标准规范。


在标准定义中,测试系统可以分为 RTE(Remote Terminal Emulator)和 SUT 两部分,但实际上从角色上看 SUT 可以进一步拆分为两部分:WAS(web application server)和 DB Server。这其中 DB Server 是每个测试厂商的数据库服务;RTE 扮演的角色是测试模型中的客户终端,事务的触发、RT 的统计等都在这里完成;标准明确要求每一个用户 terminal 都必须保持一个长连接,显然在海量 Warehouse 时 DB 是无法承受这么多连接的,WAS 就是 RTE 和 DB 之间桥梁,标准定义可以使用连接池,在保证对应用透明的情况下它可以做所有请求的管理。


这三个角色中,WAS 和 DB 是必须商业化可购买且提供支付服务的,OceanBase 这次是使用了 OpenResty 作为 WAS 供应商。而 RTE 则一般由各个参测厂商自行根据标准实现,但所有实现代码必须经过审计的严格审计,OceanBase 这次完整的实现了一整套完全合规的 RTE,并且支持在大规模测试系统中部署。要知道在实际的 TPC-C 测试流程中,不只是对 DB 端能力的考验,RTE 端同样存在极大的资源消耗和压力。以这次 6088w tpmC 测试结果看,我们一共在 64 台 64c128G 的云服务器上运行了 960 个 RTE 客户端,来模拟总计 47942400 个用户 terminal,最后还需要基于这么多 RTE 统计结果进行一致性和持久化审计验证。


虽然只是测试客户端,但 RTE 的中同样有大量的可能导致最后测试失败的小细节,比如大家可能注意不到的所有事务都因为用了 web 端模拟终端后需要增加的 100 毫秒 rt,又比如为了模拟用户终端输出显示的 100 毫秒延时。

测试规划

TPC-C 从来都不是一个简单的测试,它很科学并没有给出强制的软硬件配置,只是给出测试规范和各种审计检查限制标准,所有数据库厂商可以根据自己的特性充分调优来拿到一个最好的性能或性价比。但这同时也对所有参测厂商提出了一个巨大的难题,如何对已有的资源进行合理规划来保证顺利完成一次对 TPC-C 榜单的冲击。


  1. 硬件选型,这里不仅要对数据库服务器选型,还需要对 RTE 以及 WAS 服务器选型。这之前需要先期进行大量的测试和调优,来摸出在保证性价比的前提下每个角色服务器的资源配置是多少刚好。这次 OceanBase 测试最大的优势就是全部使用了云化资源,我们不需要再关注最底层机房、机柜、布线这些细节,只需要通过快速的规格调整来拿到我们需要的机型。

  2. 参数选择,如何选择合适的配置参数是一个非常令人头疼的问题。举个例子,一个最典型的问题就是我们最终要跑多少个 Warehouse,每个数据库服务器上承载多少 Warehouse。TPC-C 标准为了尽可能模拟真实业务场景,通过每个事务限定不同的 think time 和 keying time 保证了一个 warehouse 的数据最多能够提供 12.86tpmC 值,因此数据库厂商想要拿到更高的成绩就必须装载更多的 warehouse,但是另一方面单机的存储空间又有预计 80%(经验值)需要预留给 60 天增量存储。在分布式数据库架构下,为了能让每个数据库服务器跑满又能充分利用本地存储空间,让每个服务器的 CPU、内存、IO 能力、存储空间的资源最大化利用,我们前后调整优化了近一个月时间。

性能压测

最受关注的性能压测部分在 TPC-C 标准中规定了以下三个状态:


  1. Ramp-up,标准允许每个数据库进行一定时间的预热来达到稳定状态,但是 ramp-up 阶段的所有配置必须和最终报告配置保持一致。

  2. Steady state,保证 ACID 及可串行化隔离级别前提下,数据库需要能够以最终报告 tpmC 值在稳定状态无任何人工干预前提下保持运行 8 小时以上,每隔半小时需要完成一次 checkpoint。

  3. Measurement Interval,标准规定了需要能够支持 8 小时稳定运行,但性能采集阶段只需要保设置 2 小时以上即可。这个阶段还需要保证累计 tpmC 波动不能超过 2%,并且必须完成至少 4 个以上的 checkpoint。


所以之前一般数据库进行性能压测一般是以下的流程,先进行一段时间的预热到达稳态,等待稳定运行一段时间并完成一个 checkpoint 后开始进入 2 小时的性能采集阶段。


而 OceanBase 这次是使用了 TPC-C 测试迄今以来最严苛的一个流程来完成这个性能测试的,我们首先使用了 10 分钟进行预热,然后在 6088w tpmC 稳态保持运行 25 分钟并完成一个检查点,再继续跑了完整的 8 小时性能压测采集阶段,总耗时超过 8 个半小时,中间性能最大波动不到 0.5%,最终结果也让审计员异常兴奋。


整个性能测试前后,审计员还需要进行数据及事务随机分布检查,简单说来就是大量全表扫描和统计 sql,最大的一条 sql 需要访问超过万亿行的 order_line 表结果,可以算是 TPC-C 里的“TPC-H 测试”。现场审计第一次遇到这些 sql 时我们也大量的出现 sql 执行超时情况,但后续基于 OceanBase2.2 版本最新的并行执行框架我们还是很快搞定了这些大 sql,所以要顺利完成 TPC-C 测试并不能只是一个偏科生,保持自身没有短板才是真正意义上的通用关系数据库,从这点上说 Oracle 仍是 OceanBase 学习的榜样。

ACID

  1. A 测试,通过提交和回滚 payment 事务来确认数据库对原子性支持,和 I 测试一样,OceanBase 的 A 测试跑了两遍,分别应对分布式事务和本地事务。

  2. C 测试,标准里的 C 测试一共包含 12 个 case,前四个是必须要完成验证的,每个 case 其实都可以认为是一个复杂的大 sql,而对于分布式数据库来说重点是需要始终保证全局一致。

  3. I 测试,标准要求 TPC-C 模型里 5 个事务除了 StockLevel 事务都需要满足最高的可串行化隔离级别,并构造了 9 个 case 来验证隔离性。对于分布式数据库而言,这个要求并没有那么容易实现,所幸 OceanBase 在 2.x 版本中提供了全局时间戳的支持,所以的 I 测试都在审计员的特别要求下跑完了全本地和全分布式两种模式的两轮测试,这也应该是 TPC-C 测试中首次有数据库厂商需要做两轮 I 测试跑 18 个 case 的,也许在不久后 TPC-C 标准定义也会因为 OceanBase 的这次测试而带来针对分布式数据库的相关更新。

  4. D 测试,OceanBase 在这个场景其实相对传统数据库是有较大天生优势的,OceanBase 每个 Warehouse 数据有两份数据三份日志,通过 paxos 强同步,保证 RPO=0 的前提下只有秒级 RTO。面对 D 测试标准中最严格的一项-部分存储介质永久故障,OceanBase 还使用了最严苛的测试场景,在使用超出标准要求的全量 6000W tpmC 压力下,我们强行销毁了一个云服务器节点,整体 tpmC 在两分钟内恢复到 6000w 并持续跑到测试时间结束,这些表现都是远远超过 TPC-C 规范要求的,相比较而言其它传统数据库基本面对有日志的存储介质故障 D 测试场景都是依赖磁盘 RAID 来恢复,OceanBase 应该算是首个没有 raid 完全依赖数据库自身恢复机制完成全部 D 测试的数据库厂商了。同时我们在 D 测试中是连续杀掉了两台服务器节点,首先杀掉一个数据节点,等待 tpmC 恢复且稳定 5 分钟后,再次杀掉了 rootserver leader 节点,tpmC 仍然快速恢复。


作者介绍:


曹晖,现任蚂蚁金服 OceanBase 团队技术专家,2017 年加入 OceanBase 团队,现从事存储引擎开发工作。


本文转载自公众号蚂蚁金服科技(ID:Ant-Techfin)。


原文链接:


https://mp.weixin.qq.com/s/zc1sO1eVRiFk8gUipZbjRA


2019-10-21 08:00934

评论

发布
暂无评论
发现更多内容

从理论到实践,实时湖仓功能架构设计与落地实战

袋鼠云数栈

数据中台 数据仓库 数据湖 湖仓一体 实时湖仓

架构师日记-聊聊开发必掌握的那些实践技能 | 京东云技术团队

京东科技开发者

软件开发 代码注释 开发技能 企业号10月PK榜

以烟草行业为例,聊聊如何基于 PLC + OPC + TDengine,快速搭建工业生产监测系统

TDengine

tdengine 时序数据库

九章云极DataCanvas多模态大模型平台实践与思考

九章云极DataCanvas

黄金眼PAAS化数据服务DIFF测试工具的建设实践 | 京东云技术团队

京东科技开发者

测试 PaaS 回归测试 企业号10月PK榜

低代码平台探讨-MetaStore元数据缓存 | 京东云技术团队

京东科技开发者

缓存 低代码 元数据 企业号10月PK榜

腾讯大数据 x StarRocks|构建新一代实时湖仓

StarRocks

大数据 腾讯 StarRocks 湖仓

商用显示设备包括哪些?

Dylan

企业 设备 显示器 LED显示屏

使用流量管理工具保护 Kubernetes 的六种方法

NGINX开源社区

Kubernetes DOS攻击 Web应用防火墙 原生云

LAS Spark+云原生:数据分析全新解决方案

字节跳动数据平台

数据库 大数据 数据中台 数据研发 企业号10月PK榜

代码的艺术 - Writing Code Like a Pianist | 京东云技术团队

京东科技开发者

代码质量 整洁代码 企业号10月PK榜 系统质量

校源行 | 开放原子开源社团(西北工业大学)授牌仪式成功举行

开放原子开源基金会

百度世界大会2023重磅发布进行时,小度全新智能音箱重构家居美学新乐章

新消费日报

面试多起来了

王磊

Java

欢迎来到 GPTSecurity!共建知识库

云起无垠

GPTSecurity

图文结合丨Prometheus+Grafana+GreatSQL性能监控系统搭建指南(下)

GreatSQL

greatsql

PaddleX解决分类、检测两大场景问题?实战精讲教程来了!

飞桨PaddlePaddle

AI 飞桨 套件

精彩回顾|【ACDU 中国行·成都站】数据库主题交流活动成功举办!

墨天轮

MySQL 数据库 oracle postgresql zabbix

华为云GaussDB亮相金融业数据库技术大会

华为云开发者联盟

数据库 后端 华为云 资讯 华为云开发者联盟

原料所属权管理领先实践,助力造币厂来料加工原料管理降本增效

用友BIP

领先实践 原料所属权管理

李彦宏:我们即将进入一个AI原生的时代|百度世界2023

飞桨PaddlePaddle

百度 大模型 文心一言

新晋技术管理者如何推动组织变革?

LigaAI

团队管理 研发管理 进阶 技术管理 企业号10月PK榜

最全数据安全评估标准汇编,你应该需要!(附下载)

极盾科技

数据安全

玩转MaxCompute SQL训练营! 数据分析挖掘迅速出师

阿里云大数据AI技术

大数据 数据分析

使用 ChaosBlade 验证 DLRover 的弹性和容错的稳定性

AI Infra

人工智能 开源 开发者 云原生 大模型

全面解析内存泄漏检测与修复技术

华为云开发者联盟

程序员 开发 内存 华为云 华为云开发者联盟

SOA认知和方法论 | 京东物流技术团队

京东科技开发者

架构 软件架构 SOA 企业号10月PK榜

推动产业升级及创新,Doris Summit Asia 2023 先进智造与电信论坛提前揭秘

SelectDB

数据库 大数据 数据仓库 实时数仓 apache doris

AIGC立法和相关版权案例分享-“心寄源”法律沙龙(2023第五期 | 总第十期)成功召开

开放原子开源基金会

活动回顾 | MatrixOne 在 SaaS 企服领域的应用解读

MatrixOrigin

数据库 分布式 HTAP MatrixOrigin MatrixOne

倒计时 2 天!聚焦 Arm 性能提升,助力龙蜥生态落地应用

OpenAnolis小助手

开源 芯片 arm Meetup 龙蜥社区

蚂蚁金服OceanBase挑战TPCC | 测试流程解析_文化 & 方法_曹晖_InfoQ精选文章