[转帖]TPC-C解析系列01_TPC-C benchmark测试介绍
TPC-C解析系列01_TPC-C benchmark测试介绍
http://www.itpub.net/2019/10/08/3334/ 学习一下.
自从蚂蚁金服自研数据库OceanBase获得TPC-C测试第一名后,引起了行业内外大量关注,我们衷心的感谢大家对OceanBase的支持与厚爱,也虚心听取外界的意见和建议。为了让大家更好的了解测试的技术细节,我们特意邀请了OceanBase的核心研发人员对本次测试做专业的技术解读,本文为第一篇,后续文章也将于近日对外发布。
OceanBase于2010年立项,九年来,研发人员一步一个脚印,不断的对OceanBase做出改进以及增加新的功能。OceanBase也从服务于支付宝开始,逐渐对外开放,为广大的各行业客户提供服务。在这个过程中,我们希望外界对OceanBase的实力有更直观的了解,让客户对我们的产品更有信心,TPC-C测试为我们提供了一个绝佳的舞台。
通过本次测试,我们发现了OceanBase的一些不足之处,比如,之前的单机数据库只能通过增加CPU、内存等来提高处理能力,OceanBase通过分布式架构,可以让大量的普通硬件设备像一台电脑一样处理数据,想提高性能只需增加设备即可,但是,OceanBase在每台设备上的性能还有不少提升空间;另外,OceanBase支持的功能、易用性、数据库生态相比业界标杆还有一些差距。
接下来,OceanBase将在两个重点方向上发力,一个是兼容Oracle数据库提供的各种功能,方便客户切换使用不同的数据库,另一个是提升OLAP处理能力,也就是数据分析挖掘等方面的能力,与OLTP一起,完善OceanBase在大数据处理方面的能力。
后续,我们还将开源本次TPC-C测试工具,希望与业界同行多多交流,共同探讨数据库技术的发展与未来。
正文:
网络上有很多介绍TPC-C benchmark的文章,而且某些数据库厂商还声称自己进行了TPC-C测试,还获得了单机百万级tpmC、分布式千万级tpmC等等。真实情况究竟是怎样呢?
就像很多人知道的,国际事务性能委员会(TPC)组织是数十家会员公司创建的非盈利组织,TPC-C是TPC组织制定的关于商品销售的订单创建和订单支付等的基准测试标准,是数据库联机交易处理系统(OLTP)的权威基准测试标准。TPC-C有5种事务,每种事务有规定的比例,分别订单支付不低于43%,订单查询、订单发货和库存查询各不低于4%,其余则为订单创建(不高于45%),tpmC值是订单创建事务每分钟执行的数量。
TPC-C benchmark测试必须通过TPC组织的审计(准确地讲是TPC-C组织认可的审计员的审计),通过审计的TPC-C的结果,其完整详实的测试报告(包括测试厂家、数据库版本、详细的软硬件配置、测试过程等)将公布在TPC组织的网站( www.tpc.org )上。没有通过TPC的审计而擅自声称自己通过了TPC-C测试、获得XXX tpmC,不仅是侵权,也是不合法的。除了OceanBase,目前在TPC网站上还没有看到任何一个国产数据库的TPC-C benchmark的测试报告,无论是完全自主研发的,还是在开源基础上修改的。
为什么TPC-C benchmark测试必须要通过TPC组织的审计呢?这还得从TPC组织的诞生说起。1980年代数据库联机交易处理系统即OLTP(Online Transactional Processing)出现后,极大地推动了诸如自动提款机(Automated teller transaction,ATM)等联机交易处理系统的发展。每个数据库厂商都试图向客户证明自己的系统性能最好、处理能力最强,但由于没有统一的性能测试标准,更没有谁来监督性能测试的执行和结果发布,一方面客户无法在不同系统之间进行比较,另一方面数据库厂商各自的性能测试数据也没有足够的说服力。
1985年初,Jim Gray联合24位来自学术界和工业界的同仁发表了名为“A Measure of Transaction Processing Power”的文章,提出了一种在线事务处理能力的测试方法DebitCredit。DebitCredit定义了数据库性能benchmark的一些关键特征( http://www.tpc.org/information/about/history.asp ):
- 定义了被测系统的功能要求而不是软件硬件本身
- 规定了被测系统的扩展准则,即性能与数据量相匹配
- 规定被测系统的事务需要在指定时间内完成(比如95%事务在1s内完成)
- 把被测系统的整体成本纳入性能benchmark
DebitCredit为数据库的联机交易处理系统性能建立了统一的、科学的衡量标准,后续相关的benchmark基本都以此为基础发展而来。然而一些厂商却删掉DebitCredit标准中的一些关键要求后进行测试以便获得更好的性能值(这种做法现在也被一些国内数据库厂商用在TPC-C benchmark测试上),这导致数据库的联机交易处理系统性能的衡量标准并没有真正统一:如果说Jim Gray等人为数据库的联机交易处理系统benchmark制定的一个法律(DebitCredit),但却没有执法队伍来保障法律的执行。1988年TPC组织的创始人Omri Serlin( http://www.tpc.org/information/who/serlin.asp )成功地说服8家公司成立了非盈利的TPC组织,统一制定和发布benchmark标准并监督和审计数据库benchmark测试,情况才发生了根本的改变。
经过三十多年的发展,TPC组织的成员超过了20个,诞生和完善了数据库性能的多个benchmark标准,并被全世界接受。比如TPC-C的第一个版本是在1992年发布的,之后经历了多次修订,以适应需求和技术的变化。为了防止厂商按自己的意愿篡改TPC-C标准进行测试以得到更高的性能值,TPC组织要求所有的TPC测试结果都要经过TPC组织认可的审计员的审计,审计员对测试的过程和结果进行详细的审核,审计通过后,审计结果连同完整的测试报告提交给TPC组织的Technical Advisory Board(TAB),TAB审核无异议后还将进行60天的公示,公示期间如有异议厂商需要证明自己的测试符合相应的TPC标准(必要时还需要再次运行benchmark测试程序)。
TPC-C是对商品销售支付等实际业务系统很好的抽象。在准备TPC-C测试的过程中,我们发现了OceanBase许多性能不优的地方,在对这些地方进行了优化和完善后,我们发现OceanBase已经达到了今年(2019年)双11的性能优化目标:事实上,TPC-C五种事务中,占比最高的两种,订单创建(new order,占比45%)和订单支付(payment,占比43%),其实就对应了生产系统中的订单创建和订单支付。因此TPC-C模型看起来很简单,恰恰是这个模型对实际的联机交易处理做了非常好的抽象。
作为一个广泛接受的标准,TPC-C非常严谨,极大地杜绝了作弊:
首先,作为一个OLTP联机交易处理系统的benchmark,TPC-C要求被测数据库必须满足数据库事务的ACID,即原子性、一致性、隔离性和持久性,其中隔离性为可串行化隔离级别,持久性要求能够抵御任何单点故障等。很显然,这是对一个OLTP数据库的基本要求。在分布式环境下,TPC-C的两种主要事务,订单创建(new order)和订单支付(payment),分别有10%和15%的分布式事务(最多可能分布在15个节点上),事务的ACID对于分布式数据库是很大的挑战,尤其是可串行化的隔离级别,这也是至今鲜少分布式数据库通过TPC-C测试的主要原因之一。国内有些厂商混淆分布式数据库的概念,把多个单机数据库堆在一起而号称分布式数据库,事实上,尽管每个单机数据库都满足ACID,但这些堆放在一起的多个单机数据库作为一个整体并不满足ACID。
其次,TPC-C规定被测数据库的性能(tpmC)与数据量成正比,事实上真实业务场景也是如此。TPC-C的基本数据单元是仓库(warehouse),每个仓库的数据量通常在70MB左右(与具体实现相关),TPC-C要求终端用户在选择事务类型时,需要按照规定的比例选择五种事务,终端用户每个事务都有一定的输入时间(对每种事务分别固定)和一定范围的随机的思考时间(一个对数函数),根据这些要求,每个仓库所能获得的tpmC上限是12.86(假设数据库的响应时间为0)。假设某系统获得150万tpmC,大约对应12万个仓库,按70MB/仓库计算,数据量约8.4TB,而TPC-C同时要求系统具备60天、每天压测8小时的存储容量,因此系统的存储容量可能要30TB或更多,而某些厂商用几百或几千个仓库全部装入内存,无视单个仓库的最大tpmC上限,然后号称获得百万tpmC,不仅不符合大多数真实业务场景,而且明显违反了TPC-C规范,就像当年TPC组织成立之前一些公司的所作所为一样。
第三,TPC-C要求被测数据库能够以平稳的性能长期地运行。测试时,去掉启动预热(ramp up)和结束降速(ramp down)时间后,被测数据库至少要性能平稳地(steady state)运行8小时,其中性能采集时段(不少于2小时)内的性能累积波动不得超过2%。众所周知,各种计算机系统在极限压力下性能会产生较大的波动并可能被压垮而崩溃,为了避免被压垮,实际生产环境从来不会让系统处于极限压力,TPC-C这个规定正是从实际生产需求出发的。此外,TPC-C要求被测数据库长时间运行,同样是实际生产系统的要求。某些数据库厂商让数据库在很短时间内冲击性能的一个尖峰值,既没有保证数据库在较长时间内稳定运行,更谈不上性能波动不超过2%,但却声称自己的数据库达到了这个尖峰性能。本次benchmark测试中,OceanBase做到了8小时性能波动低于0.5%。
第四,TPC-C要求被测数据库的写事务的结果必须在一定时间内数据落盘(指数据库数据,不是日志,事实上redo log在事务提交前就落盘了),对于具备checkpoint功能的数据库,checkpoint的间隔不得超过30分钟,checkpoint数据持久化的时间不得超过checkpoint间隔。我们理解这是为了保证数据库系统在掉电等异常情况下有较短的故障恢复时间。传统数据库的数据以数据块(例如4KB/8KB的page/block)为基本单位,做到这个是把脏页刷盘。但OceanBase并非如此,这是因为,第一OceanBase是多副本(本次测试是3副本)的跨机器部署,单机器异常的情况下都能够立即恢复(RTO=30s)且数据无损(RPO=0),并不依赖于写事务的数据落盘;第二个原因:OceanBase是“基线数据在硬盘+修改增量数据在内存”的结构,设计上是修改增量数据一天落盘一次(即每日合并,可根据业务量的增加而自动增加每日合并次数),实际生产系统不需要也不依赖数据在较短时间(比如30分钟)内落盘。在TPC-C benchmark测试中,OceanBase设置了checkpointing,保证所有checkpoint的间隔小于30分钟,并使得checkpoint数据持久化的时间小于checkpoint间隔,以符合TPC-C规范。
第五,业务定向优化(profile-directed optimization,PDO)可以提升软件的性能,TPC-C也允许使用PDO,但有一些限制,比如采用PDO优化的版本需要在客户使用,数据库厂家需要对PDO优化的版本提供技术支持等。为了避免可能出现的异议,OceanBase没有使用PDO。
最后,TPC-C规范虽然十分严格,但依然鼓励新技术和新方法的使用,比如本次OceanBase的TPC-C benchmark测试,就没有像之前的TPC-C benchmark一样购买物理服务器和存储,而是租用了阿里云公有云的ECS虚拟机,这不仅使得扩容/缩容轻而易举,还可按需租赁而极大降低实际测试成本。
[转帖]TPC-C解析系列01_TPC-C benchmark测试介绍的更多相关文章
- ETL利器Kettle实战应用解析系列一【Kettle使用介绍】
本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析系列二 [应用场景和实战DEMO下载] 三.ETL利器Kettle ...
- (转载)ETL利器Kettle实战应用解析系列一【Kettle使用介绍】
http://www.cnblogs.com/limengqiang/archive/2013/01/16/kettleapply1.html ETL利器Kettle实战应用解析系列一[Kettle使 ...
- LiteDB源码解析系列(1)LiteDB介绍
最近利用端午假期,我把LiteDB的源码仔细的阅读了一遍,酣畅淋漓,确实收获了不少.后面将编写一系列关于LteDB的文章分享给大家,希望这么好的源码不要被埋没. 1.LiteDB是什么 这是一个小型的 ...
- ETL利器Kettle实战应用解析系列三
本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析系列二 [应用场景和实战DEMO下载] 三.ETL利器Kettle ...
- ETL利器Kettle实战应用解析系列二
本系列文章主要索引如下: 一.ETL利器Kettle实战应用解析系列一[Kettle使用介绍] 二.ETL利器Kettle实战应用解析系列二 [应用场景和实战DEMO下载] 三.ETL利器Kettle ...
- [转帖]TPC-C解析系列04_TPC-C基准测试之数据库事务引擎的挑战
TPC-C解析系列04_TPC-C基准测试之数据库事务引擎的挑战 http://www.itpub.net/2019/10/08/3331/ OceanBase这次TPC-C测试与榜单上Oracl ...
- [转帖]TPC-C解析系列02_OceanBase如何做TPC-C测试
TPC-C解析系列02_OceanBase如何做TPC-C测试 http://www.itpub.net/2019/10/08/3333/ 导语: 蚂蚁金服自研数据库OceanBase登顶TPC- ...
- [转帖]TPC-C解析系列05_TPC-C基准测试之存储优化
TPC-C解析系列05_TPC-C基准测试之存储优化 http://www.itpub.net/2019/10/08/3332/ 蚂蚁金服科技 2019-10-08 11:27:02 本文共3664个 ...
- [转帖]TPC-C解析系列03_TPC-C基准测试之SQL优化
TPC-C解析系列03_TPC-C基准测试之SQL优化 http://www.itpub.net/2019/10/08/3330/ TPC-C是一个非常严苛的基准测试模型,考验的是一个完备的关系数据库 ...
随机推荐
- CSS3字体大小rem属性用法
PX为单位 在Web页面初期制作中,我们都是使用“px”来设置我们的文本,因为他比较精确和固定. 只要页面某元素设置了px字体大小,其子元素/子孙元素未设置字体大小或设置的字体大小css优先级没父元素 ...
- Tkinter 之TreeView表格与树状标签
一.TreeView介绍 TreeView组件是一个树状结构和表格的结合体.第一列是树状结构,后几列是列表.每一行表示一个item,树的item可以分级,每个item有子item,名称对应text标签 ...
- leetcode 467. 环绕字符串中唯一的子字符串
题目描述: 把字符串 s 看作是“abcdefghijklmnopqrstuvwxyz”的无限环绕字符串,所以 s 看起来是这样的:"...zabcdefghijklmnopqrstuvwx ...
- 和小哥哥一起刷洛谷(7) 图论之dijkistra算法
关于dijkstra 维基百科 戴克斯特拉算法(英语:Dijkstra's algorithm,又译迪杰斯特拉算法)由荷兰计算机科学家艾兹赫尔·戴克斯特拉在1956年提出.戴克斯特拉算法使用了广度优先 ...
- 【多线程与并发】Java并发工具类
主要有两类 ①并发流程控制相关:CountDownLatch.CyclicBarrier.Semaphore ②线程间交换数据相关:Exchanger: CountDownLatch 作用:允许一个或 ...
- ubuntu之路——day8.1 深度学习优化算法之mini-batch梯度下降法
所谓Mini-batch梯度下降法就是划分训练集和测试集为等分的数个子集,比如原来有500W个样本,将其划分为5000个baby batch,每个子集中有1000个样本,然后每次对一个mini-bat ...
- Git Bash基础使用(初始化)
前提是在码云上已经新建一个空的项目,可参考:https://www.cnblogs.com/babysbreath/p/9170455.html 1.新建一个目录,存放下载下来的项目,我在D盘新建了一 ...
- http json token
http json token https使用证书来保证链接的安全,是目前最为流行的做法. 另一种保证HTTP 函数的安全,就是http json token,只有TOKEN验证通过,才能调用方法(一 ...
- Cesium原理篇:6 Renderer模块(1: Buffer)【转】
https://www.bbsmax.com/A/n2d9P1Q5Dv/ 刚刚结束完地球切片的渲染调度后,打算介绍一下目前大家都很关注的3D Tiles方面的内容,但发现要讲3D Tiles,或者充分 ...
- 高通平台打开 dynamic debug方法【学习笔记】
一.首先在内核的配置文件添加如下的配置: CONFIG_DEBUG_FS=y CONFIG_DYNAMIC_DEBUG=y 二.找到自己平台对应的 device/qcom/xxxx/init.targ ...