1. TPC-C介绍
Transaction Processing Performance Council (TPC) 事务处理性能委员会,是一家非盈利IT组织,他们的目的是定义数据库基准并且向产业界推广可验证的数据库性能测试。而TPC-C最后一个C代表的是压测模型的版本,在这之前还有TPC-A、TPC-B。A / B 两个版本模拟的是银行转账业务,相对业务模型比较简单。TPC-C自92年初发布,在过去20多年,不管是在业界还是学术界都是应用最为广泛的OLTP压测工具。
TPC-C测试用到的模型是一个大型的商品批发销售公司,它拥有若干个分布在不同区域的商品仓库。当业务扩展的时候,公司将添加新的仓库。每个仓库负责为10个销售点供货,其中每个销售点为3000个客户提供服务,每个客户提交的订单中,平均每个订单有10项产品,所有订单中约1%的产品在其直接所属的仓库中没有存货,必须由其他区域的仓库来供货。同时,每个仓库都要维护公司销售的100000种商品的库存记录。
1.1 TPC-C表结构
TPC-C测试系统数据库由9张表组成,它们的关系如下图所示,表框里的数字表示该表将要存放多少条记录,仓库数W的调整在测试中能够体现数据库所能够支持的数据规模的能力:
- Warehouse(仓库表,W表示仓数,能够体现数据库所能够支持的数据规模)
- District(区域表,W*10表每个仓为10个销售点供货)
- Customer(用户表,W*30k表示每个供货点为3000个客户提供服务)
- Stock(库存表,W*100k表示每个仓库维护10w种商品库存记录)
- Order(订单表)
- New-Order(新订单表)
- Item(商品表,表固定大小为10w)
- Order-Line(订单行)
- History(历史表)
1.2 TPC-C事务模型
TPC-C需要处理的交易事务主要为以下几种:
- 新订单(New-Order,占比45%) :客户输入一笔新的订货交易;
- 支付操作(Payment,占比43%) :更新客户帐户余额以反映其支付状况;
- 发货(Delivery,占比4%) :发货(模拟批处理交易);
- 订单状态查询(Order-Status,占比4%) :查询客户最近交易的状态;
- 库存状态查询(Stock-Level,占比4%) :查询仓库库存状况,以便能够及时补货。
TPC-C五种交易类型中StockLevel和OrderStatus这两种交易属于只读事务,NewOrder 、Payment、Delivery属于读写事务,这五种请求是互相独立运行的,在交易组合中读写操作占92%,只读操作占8%。TPC-C通过tpmC值(Transactions per Minute)来衡量系统最大有效吞吐量(MQTh,Max Qualified Throughput),其中Transactions以NewOrder Transaction为准,即最终衡量单位为每分钟处理的新订单数,这就说明了:如果一台机器有 1000 tpmc (Transactions per Minute),那么它实际上处理的交易(请求)为 1000/45% = 2222。
2. BenchmarkSQL使用教程
目前做TPC-C压测的开源工具很多,如mysql-tpcc、HammerDB、Benchmarksql等。这三种是在做TPC-C压测使用最多的,也是资料比较丰富的工具。由于我们在工作使用的数据库种类会比较多,mysql-tpcc只能用在MySQL或者兼容MySQL的数据库。HammerDB使用方便,图形化界面可测DB2、PG、Oracle、MySQL等但是对于NewSQL类数据库兼容不是很友好。因为BenchmarkSQL支持多种TPC模型,并且支持不同的数据库类型(如Oracle, PG, MySQL), 本篇文章介绍BenchmarkSQL的使用教程。
2.1 安装BenchmarSQL
下载安装包: