1 TPC-C概述

TPC-C是TPC(事务处理性能委员会)推出的一系列性能测试标准中的一款,自1992年推出,便成为了数据库性能测试的标杆,各个数据库大厂都向TPC委员会提交了测试结果,以期在TPC-C测试的排行榜上拥有一席之地。就像决战紫禁之巅,论剑华山之巅,拥有一席之地的都是成名的大佬们。

本章介绍TPC-C这个构造了华山之巅的测试标准,包括测试的模型和架构。至于提到的TPC委员会是什么,我们在前一篇文章《TPC的前世今生》中介绍了事务处理性能委员会的来龙去脉,有兴趣的同学可以通过阅读之前文章,了解TPC的成立起始。


2 TPC-C详解

TPC-C模型与设计

概括来讲,TPC-C是用来衡量在线事务处理的基准,TPC-C提供了一个说明书,用来描述这个基准,在写这篇文章的时候,该说明书的版本是于2010年发布的5.11.0,可以通过访问TPC的网站来获取最新的说明书。

TPC-C模型是模拟一个商品批发公司的销售模型,这个模型涵盖了一个批发公司面向客户对一系列商品进行销售的过程,这包括管理订单,管理库存,管理账号收支等操作。这些操作涉及到仓库、商品、客户、订单等概念,围绕这些概念,构造了数据表格,以及相应的数据库操作。

TPC-C的批发操作在概念上包括5个操作,新订单操作、付款操作、订单状态操作、发货操作,库存操作,这些操作一起构成了完整的批发流程,其中新订单操作是用来衡量tpmC的核心,也就是数据库系统每分钟所能处理的交易数量。下面,我们将详细讲述TPCC的数据库设计与特点,以及各个操作的组成。


数据库设计

如这张来自TPCC-C测试说明书的图所示,图中9个实体对应了TPC-C测试中9个数据表,也对应批发模型中参与的对象。Warehouse是仓库,District是区域,每个Warehouse为10个区域提供商品批发,Customer是客户,每个区域有3千个客户,每个客户会产生至少1个订单,每个订单又分为New-Order和Order-line两部分,New-Order是用来标示订单是否为新订单,在完成订单的发货操作后,New-Order中的记录将被删除,Order-line是订单中进行批发的商品订购流水,每个订单有5到10个交易商品。Stock是用来记录Warehouse的库存情况,Item是记录Warehouse中所存储的商品。

《TPC测试系列》II:TPC-C 标准简介_java


业务设计

如前所述,TPC-C的业务模型包括5个操作,分别是新订单操作、付款操作、订单状态操作、发货操作,库存操作。由于新订单操作是tpmC的测试核心,下面我们对新订单操作进行说明,其他的操作就不一一说明,可自行查阅测试标准说明书。

新订单操作是客户在指定的仓库进行下订单,其主体围绕客户和仓库来进行,下订单的操作通过9个数据库DML语句来完成,如下我们列出这些操作的嵌入式SQL的内容。

1、获取用户的信息

《TPC测试系列》II:TPC-C 标准简介_java_02

2、锁定订单编号

《TPC测试系列》II:TPC-C 标准简介_java_03

3、更新订单编号

《TPC测试系列》II:TPC-C 标准简介_java_04

4、生成新的订单

《TPC测试系列》II:TPC-C 标准简介_java_05

5、产生新订单标识

《TPC测试系列》II:TPC-C 标准简介_java_06

6、获取商品信息

《TPC测试系列》II:TPC-C 标准简介_java_07

7、获取库存信息

《TPC测试系列》II:TPC-C 标准简介_java_08

8、更新库存信息

《TPC测试系列》II:TPC-C 标准简介_java_09

9、创建订单流水

《TPC测试系列》II:TPC-C 标准简介_java_10

以上是一个新订单的全部操作,其中第5和9步操作,将作为后续的付款操作和发货操作的基础。


模型总结

TPC-C测试是一个读写混合的测试,其读写比例在1比1左右,各个操作在测试的占比分别为New-Order占45%,Payment占43%,Delivery占4%,Order-Status占4%,Stock-Level占4%。TPC-C测试对性能的衡量标准tpmC是以New-Order中订单处理能力来进行度量,每秒钟所处理的订单数越多,那么该数据库系统的处理能力就越强。但是,为了防止通过一些取巧的手段,比如将较少的仓库全部加载到内存中,所有操作在内存中完成事务操作,并不进行落盘处理。所以TPC-C对每个仓库的tpmC做了一个上限处理,也就是每个仓库最多只有12.86 tpmC的限制,按照每个仓库50M到70M的数据量来估算,一万个仓库需要至少500G的存储,从而避免厂商通过一些优化手段提升性能影响测试结果。而且,要模拟用户的空闲时间,思考时间,更真实的反应实际交易中每个仓库的处理量,对于每个仓库的tpmC上限也是需要进行设置的。


3 相关链接

说明书获取地址

http://www.tpc.org/tpc_documents_current_versions/current_specifications5.asp


4 总结

至此,对TPC-C测试标准,我们都有大概的了解。

后续,我们会推出一些针对TPC-C测试的MySQL调优,尽情期待,感谢诸位赏光~


《TPC测试系列》II:TPC-C 标准简介_java_11

腾讯数据库技术团队对内支持QQ空间、微信红包、腾讯广告、腾讯音乐、腾讯新闻等公司自研业务,对外在腾讯云上依托于CBS+CFS的底座,支持TencentDB相关产品,如CynosDB、CDB、CTSDB、MongoDB、CES等。腾讯数据库技术团队专注于持续优化数据库内核和架构能力,提升数据库性能和稳定性,为腾讯自研业务和腾讯云客户提供“省心、放心”的数据库服务。此公众号旨在和广大数据库技术爱好者一起推广和分享数据库领域专业知识,希望对大家有所帮助。