1.TPC概述
TPC , Transaction Processing Performance Council,是一个非盈利组织,成立于1988年,这个组织主要的功能是定义事务处理、数据库的基准,这个基准用于评估服务器的性能,并且把服务器评估的结果发布在TPC的官方网站上。简单的讲TPC就是系统评测皇家科学院。
在数据库选型、新系统上线时,常常需要对数据库性能进行测试。数据库性能测试的工具有很多,比如常见的sysbench,但sysbench只能进行单表的压测,不能模拟接近生产系统的复杂的业务模型。
绝大部分数据库产品在发布时都会进行TPC压力测试。
针对数据库不同的使用场景,TPC组织发布了多项测试标准,其中被业界广泛接受和使用的有TPC-C、TPC-H和TPC-DS。其中,TPC-C主要是针对OLTP数据库进行性能测试,而TPC-H和TPC-DS主要是针对OLAP数据库进行测试。
TPC的官方网站在这里http://tpc.org,在主页上飘着一行小字:The TPC is a non-profit corporation focused on developing data-centric benchmark standards and disseminating objective, verifyable data to the industry. TPC起到两个作用:1. 创造不错的benchmark,2. 创造一个不错的review流程。好的benchmark就像是好的法律,而好的review流程就像是警察,律师,法官这样的角色。因为不管benchmark的细节做到多么细致,总有些所谓的"灰色地带",而好的review流程就可以比较好地处理这些问题。
2.TPC-C
TPC-C是业界常用的一套benchmark,由TPC委员会制定发布,用于评测数据库的联机交易处理(OLTP)能力。主要涉及10张表,包含五类业务事务模型(NewOrder–新订单的生成、Payment–订单付款、OrderStatus–最近订单查询、Delivery–配送、StockLevel–库存缺货状态分析)。
2.1.TPC-C事务模型
TPC-C需要处理的交易事务主要为以下几种:
(1)新订单(New-Order) :客户输入一笔新的订货交易;
(2)支付操作(Payment) :更新客户帐户余额以反映其支付状况;
(3)发货(Delivery) :发货(模拟批处理交易);
(4)订单状态查询(Order-Status) :查询客户最近交易的状态;
(5)库存状态查询(Stock-Level) :查询仓库库存状况,以便能够及时补货。
2.2.TPC-C性能衡量指标tpmC
TPC-C通过tpmC值(Transactions per Minute)来衡量系统最大有效吞吐量(MQTh,Max Qualified Throughput),其中Transactions以NewOrder Transaction为准,即最终衡量单位为每分钟处理的新订单数。
流量指标(Throughput,简称tpmC):按照TPC组织的定义,流量指标描述了系统在执行支付操作、订单状态查询、发货和库存状态查询这4种交易的同时,每分钟可以处理多少个新订单交易。所有交易的响应时间必须满足TPC-C测试规范的要求,且各种交易数量所占的比例也应该满足TPC-C测试规范的要求。在这种情况下,流量指标值越大说明系统的联机事务处理能力越高。
2.3.TPC-C表模型
TPC-C表模型如下图所示:
依据TPC-C模型,有很多不同的测试工具,如Percorna公司的TPCC-MYSQL, BenchmarkSQL等。
3.TPC-H
TPC-H 是业界常用的一套 Benchmark,由 TPC 委员会制定发布,用于评测数据库的分析型查询能力。TPC-H 查询包含 8 张数据表、22 条复杂的 SQL 查询,大多数查询包含若干表 Join、子查询和 Group-by 聚合等。
简单来说,TPC-H就是通过22个复杂SQL查询来评估数据库OLAP的性能。
4.TPC-DS
TPC-DS(Transaction Processing Performance Council Decision Support Benchmark)是一个面向决策支持系统(Decision Support System,简称 DSS)的基准测试,该工具是由 TPC 组织开发,它模拟了多维分析和决策支持场景,并提供了 99 个查询语句,用于评估数据库系统在复杂的多维分析场景下的性能。每个查询都设计用于模拟复杂的决策支持场景,包括跨多个表的连接、聚合和分组、子查询等高级 SQL 技术。
4.1.业务模型
业务模型分为以下三个方面
(1)数据模型和数据访问:采用雪花模型,有一系列的事实表和维度表,维度表分为以下几类:static(比如日期维度,不会改变),historical(历史记录保留,时间戳代表是否合法,比如item维度),non-historical(新纪录覆盖历史记录,总是使用最新数据,比如customer维度)。包含7张事实表:store_sales,store_returns,catalog_sales,catalog_returns,web_sales,web_returns,inventory。三种渠道的销售和利润数据,以及跟促销有关的数据,还有17张维度表:store,call_center,catalog_page,web_site,web_page,warehouse,customer,customer_address,customer_demographics,date_dim,household_demographics,item,income_band,promotion,reason,ship_mode,time_dim。测试数据大小包含多种size,1TB,3TB,10TB,30TB,100TB。使用SF(Scale Factor)来控制数据规模。
(2)查询模型:包含了多种查询类型,比如查询模式比较固定的报表类查询,比如ad-hoc查询,比如一些包含多join和聚合运算的复杂查询。分析的数据量大,并且都是在回答真实场景下的商业问题。
(3)数据维护(data maintenance,记作DM):这是TPC-DS v3新增的一个测试。OLAP系统的有效性是由业务数据作为基础的,因此从OLTP系统到OLAP系统的数据导入这一步也是很关键的,阶段性的数据"refresh"是数据仓库不可或缺的部分,加入这一个角度使得TPC-DS benchmark更加全面,公平。过程包括加载数据,同时把数据转化成目标格式,删除过期数据,插入新的事实表数据。即包含常说的ETL中的T(Transformation)和L(Load),不包含E(Extraction),也就是下图中flat files的产生过程忽略。