南大通用GBase 8c是一款具有多模多态、高性能、高可用、高安全等特性的企业级事务型((on-line transaction processing, OLTP)数据库,其开发者和使用者也必然关注GBase 8c的TPC-C性能测试。

什么是TPC-C?“TPC-C是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下也把这类系统称为业务处理系统。1992年7月发布。几乎所有在OLTP市场提供软硬平台的国外主流厂商都发布了相应的TPC-C测试结果,随着计算机技术的不断发展,这些测试结果也在不断刷新。”——引用自360百科

下面我们对基于GBase 8c的TPC-C测试进行实践操作。
1 TPC-C测试理论

1.1 标准由来
TPC(Transaction Processing Performance Council,事务处理性能委员会)是一个非盈利组织,其成员单位主要是国外计算机相关的软硬件厂商。管理内容主要是制定了商务应用基准程序的标准规范以及性能、价格度量标准,并定期发布测试结果。发展至今,已经形成了OLTP较为规范的性能测试标准。任何厂商或测试人员都可以根据TPC给出的规范,建立自有测试系统或平台。 TPC-C则是TPC专门针对OLTP系统给出的规范(C指TPC中的C基准程序),使用性能和价格度量。其中,我们主要关注tpmC(transactions per minute,tpm)衡量,其定义是每分钟内系统处理的新订单个数。此外,TPC-C也经常体现系统性能价格比,单位是$/tpmC,定义为系统的总价格(默认$)/tpmC的数值。

1.2 规范概要OLTP系统具有比较鲜明的特点,这些特点主要表现如下:

  • 多种事务处理并发执行,充分体现了事务处理的复杂性;
  • 在线与离线的事务执行模式;
  • 多个在线会话终端;
  • 适中的系统运行时间和应用程序运行时间;
  • 大量的磁盘I/O数据流;
  • 强调事务的完整性要求(ACID);
  • 对于非一致的数据库分布,使用主键和从键进行访问;
  • 数据库由许多大小不一、属性多样,而又相互关联的数据表组成;
  • 存在较多数据访问和更新之间的资源争夺。

1.3 测试模型
TPC-C测试通用模型假定了一个大型商品批发销售公司,拥有若干分布在不同区域的商品仓库(Warehouse)。当业务扩展的时候,公司将添加新的仓库。每个仓库负责为10个销售区域(District)供货,其中每个销售区域为3000个客户(Customer)提供服务,每个客户提交的订单(Order)中,平均每个订单有10项产品(Item),所有订单中约1%的产品在其直接所属的仓库中没有存货,必须由其他区域的仓库来供货。同时,每个仓库都要维护公司销售的100000种商品的库存记录。

TPC-C测评系统数据库由9张表组成,它们之间的关系如下图:
图片
图中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中所存储的商品。“+”号表示这种对应关系可能会更多。

1.4 事务说明
该测试模型在OLTP系统中需要处理的交易事务主要为以下几种:新订单(New-Order):客户输入一笔新的订货交易;支付操作(Payment):更新客户帐户余额以反映其支付状况;发货(Delivery):发货(模拟批处理交易);订单状态查询(Order-Status):查询客户最近交易的状态;库存状态查询(Stock-Level):查询仓库库存状况,以便能够及时补货。

1.5 测试指标
TPC-C测试的结果主要有两个指标,即流量指标(Throughput,简称tpmC)和性价比(Price/Performance,简称Price/tpmC)。

  • 流量指标(Throughput,简称tpmC):按照TPC组织的定义,流量指标描述了系统在执行支付操作、订单状态查询、发货和库存状态查询这4种交易的同时,每分钟可以处理多少个新订单交易。所有交易的响应时间必须满足TPC-C测试规范的要求,且各种交易数量所占的比例也应该满足TPC-C测试规范的要求。在这种情况下,流量指标值越大说明系统的联机事务处理能力越高。
  • 性价比(Price/Performance,简称Price/tpmc):即测试系统的整体价格与流量指标的比值,在获得相同的tpmC值的情况下,价格越低越好。

2 TPCC测试实操
2.1 BenchmarkSQL工具简介‌
BenchmarkSQL‌是一款经典的开源数据库测试工具,内嵌了TPC-C测试脚本,支持Oracle、MySQL、PostgreSQL、SQL Server等众多数据库的基准测试。BenchmarkSQL通过模拟多种事务处理,如新订单、支付操作、订单状态查询、发货、库存状态查询等,来对数据库进行压力测试,从而获得压测值。相较于其他工具,BenchmarkSQL更能贴切地模拟出真实的应用场景,因此越来越多的客户在对数据库进行压测时,更多的选择使用BenchmarkSQL。此外,BenchmarkSQL还提供了一个易于使用的JDBC基准测试程序,与OLTP的TPC-C标准非常相似,使得它成为测试数据库性能的理想选择‌。使用BenchmarkSQL进行测试时,用户可以在Linux环境下对其进行配置和运行,通过简单的操作即可测试数据库的性能。支持国外主流数据库和一些国产数据库的测试,显示了其在数据库性能测试领域的广泛应用和适应性‌。
2.2 基于GBase 8c数据库的BenchmarkSQL调试
2.2.1 测试概述本文以GBase 8c V5 S5.0.0版本为例,进行基于GBase 8c的TPC-C性能基准测试。测试环境为两台服务器,均采用Kunpeng920 CPU架构和麒麟V10操作系统。一台压力机运行Benchmarksql,一台服务器部署数据库,且负载机与数据库服务器万兆网络非直连状态下(通过万兆交换机路由)。
2.2.2 常用BenchmarkSQL配置参数简介下图为测试常用的BenchmarkSQL配置(即后面埋数据和压测使用的props.gbase文件)
图片
基本配置参数及其含义如下:

  • db=postgres:指定了用于压测的目标数据库管理系统为PG系。
  • driver=org.postgresql.Driver:配置用于PG系的Java数据库连接(JDBC)驱动程序类。
  • conn = xxx:配置连接字符串,用于连接到运行数据库的主机IP、端口号以及数据库名,上图后面附加参数的含义为是否使用SQL的解析cache、日志等级、批量模式、获取数据的数据量。
  • user=test_gs:配置将用于认证连接到数据库的用户名。
  • password=gbase;123:配置指定用户的密码。
  • warehouses=1000:配置压测中将使用的仓库数量。
  • loadWorkers=100:配置用于初始数据加载阶段的工作线程数量。
  • terminals=1000:配置在性能测试期间将使用的模拟终端(用户)数量,即压测并发数。
  • runTxnsPerTerminal=0:配置每个终端在性能测试期间要执行的事务数量。
  • runMins=20:配置性能测试的持续时间,单位为分钟。
  • limitTxnsPerMin=0:配置性能测试期间每分钟可以执行的事务数量上限。
  • terminalWarehouseFixed=true:指示是否将终端分配到固定的仓库。
  • newOrderWeight=45:配置在压测工作负载中NewOrder事务的权重。
  • paymentWeight=43:配置在压测工作负载中Payment事务的权重。
  • orderStatusWeight=4:配置在压测工作负载中OrderStatus事务的权重。
  • deliveryWeight=4:配置在压测工作负载中Delivery事务的权重。
  • stockLevelWeight=4:配置在压测工作负载中StockLevel事务的权重。

2.2.3 基于GBase 8c数据库的BenchmarkSQL使用步骤
在了解了BenchmarkSQL工具配置文件中的常用参数后,可以对数据库进行TPCC压力测试,常用测试流程和步骤可参考如下:
(1)部署GBase 8c数据库后(操作详见《GBase 8c V5_5.0.0_安装部署手册》),连接访问默认postgres数据库,例如执行:

gsql -p 17400 -d postgres -r

(2)创建一个数据库用户 test_gs 并赋予管理员权限

create user test_gs identified by 'gbase;123' profile default;
alter user test_gs sysadmin;

(3)创建一个待测数据库 test_db 归属用户 test_gs

create database test_db encoding 'UTF8' template=template0 owner test_gs;

(4)根据需求配置BenchmarkSQL工具,使用工具向待测数据库埋入数据(该props.gbase文件即为前面提到的BenchmarkSQL配置文件)。

cd benchmarksql-5.0/run
./runDatabaseBuild.sh props.gbase

(5)埋入数据后,继续使用BenchmarkSQL工具对待测数据库进行压力测试(该props.gbase文件同样为前面提到的BenchmarkSQL配置文件)。

cd benchmarksql-5.0/run
./runBenchmark.sh  props.gbase

(6)等待测试时间达到runMins设置的时间后,会输出 tpmC 的指标值。欢迎大家尝试~~或者过程中有什么疑问或问题,可在评论区指出。


读研的抽屉
1 声望0 粉丝