中文 TPC C简介 - domino-succ/tpcc-hbase GitHub Wiki
TPC-C Benchmark是一个对OLTP(联机交易处理)系统进行测试的规范,使用一个商品销售模型对OLTP系统进行测试,其中包含五类事务:
- NewOrder –新订单的生成;
- Payment –订单付款;
- OrderStatus –最近订单查询;
- Delivery –配送;
- StockLevel –库存缺货状态分析。
模型中包含若干个仓库(WAREHOUSE),每个仓库包含10个地区(DISTRICT),每个地区为3000个客户(CUSTOMER)提供服务,100000种商品(ITEM)被供应,每个仓库都有对应于每种商品的库存数据(STOCK)。客户下单后,包含若干个订单明细(ORDER-LINE)的订单(ORDER)被生成,并被加入新订单(NEW-ORDER)列表。客户对订单支付还会产生交易历史(HISTORY)。这些就是TPC-C模型中的9个数据表。其中,仓库的数量W可以根据系统的实际情况进行调整,以使系统性能测试结果达到最佳。
TPC-C使用tpmC值(Transactions per Minute)来衡量系统最大有效吞吐量(MQTh,Max Qualified Throughput),其中Transactions以NewOrder Transaction为准,即最终衡量单位为每分钟处理的新订单数。
在测试开始前,TPC-C Benchmark规定了数据库的初始状态,也就是数据库中数据生成的规则,其中ITEM表中固定包含10万种商品,仓库的数量可进行调整,假设WAREHOUSE表中有W条记录,那么:
- STOCK表中应有W×10万条记录(每个仓库对应10万种商品的库存数据);
- DISTRICT表中应有W×10条记录(每个仓库为10个地区提供服务);
- CUSTOMER表中应有W×10×3000条记录(每个地区有3000个客户);
- HISTORY表中应有W×10×3000条记录(每个客户一条交易历史);
- ORDER表中应有W×10×3000条记录(每个地区3000个订单),并且最后生成的900个订单被添加到NEW-ORDER表中,每个订单随机生成5~15条ORDER-LINE记录。
在测试过程中,每一个地区(DISTRICT)都有一个对应的终端(Terminal),模拟为用户提供服务。在每个终端的生命周期内,要循环往复地执行各类事务,每个事务的流程如图所示,当终端执行完一个事务的周期后,就进入下一个事务的周期,如下图所示。
在事务执行周期开始,首先要随机选择一个事务类别,每类事务都有一个权值,以保证最终该类事务数量占有比例不低于:
- NewOrder 43%,
- Payment 43%,
- OrderStatus 4%,
- Delivery 4%,
- StockLevel 4%.
然后,终端模拟用户输入事务所需的参数,并等待一个输入时间(Keying Time);等待结束后,事务执行正式开始,执行结束后记录事务的实际执行时间(txnRT),TPC-C对每类事务的执行时间都有一个最低要求,分别是:
- 至少90%的NewOrder事务执行时间要低于5秒,
- 至少90%的Payment事务执行时间要低于5秒,
- 至少90%的OrderStatus事务执行时间要低于5秒,
- 至少90%的Payment事务执行时间要低于5秒,
- 至少90%的StockLevel事务执行时间要低于20秒;
最后,终端模拟用户对结果的查看以及思考,等待一个思考时间(Thinking Time);在思考时间结束后,进入下一个事务周期。 在整个测试过程结束后,用处理过的新订单事务总数量除以整个测试运行的分钟数并取整,就得到了tpmC的值。