1. 前言
谨以此篇,献给缺少TPCC调优技能包的人,希望看完此篇的pger能掌握一些基本的TPCC调优技能,让PostgreSQL能在越来越多的场景下PK赢其他数据库,创佳绩。2. TPCC简介
2.1. TPCC介绍
TPC-C 是一种衡量 OLTP 系统性能和可伸缩性的基准测试项目。它由一系列的 OLTP 工作流组成,包括查询,更新及队列式小批量事务在内的广泛数据库功能。它模拟了一个典型的 OLTP 应用环境中的活动,这些活动由一系列复杂的事务组成。TPC-C 工作流应该具备以下特性:
1.适当复杂的 OLTP 事务
2.在线和延迟事务执行模型
3.多用户
4.适当的系统和应用执行时间
5.大量的磁盘输入和输出
6.事务完整性(ACID)
7.随机的数据访问
8.数据库由各种大小,属性和关系的表组成
2.2. TPCC E-R 模型
TPC-C 模拟了一个比较有代表意义的 OLTP 应用环境:在线订单处理系统。假设有一个大型商品批发商,拥有 N 个位于不同区域的仓库,每个仓库负责为 10 个销售点供货,每个销售点有 3000 个客户,每个客户平均一个订单有 10 项产品。由于一个仓库中不可能存储公司所有的货物,有一些请求必须发往其它仓库,因此,数据库在逻辑上是分布的。N 是一个可变参数,测试者可以随意改变 N,以获得最佳测试效果。以下为ER模型。
TPC-C 输入数据流
TPC-C 系统需要处理的交易有以下五种:
1.New-Order:客户输入一笔新的订货交易
事务内容:对于任意一个客户端,从固定的仓库随机选取 5-15 件商品,创建新订单。其中 1%的订单要由假想的用户操作失败而回滚。
主要特点:中量级、读写频繁、要求响应快。
2.Payment:更新客户账户余额以反应其支付状况
事务内容:对于任意一个客户端,从固定的仓库随机选取一个辖区及其内用户,采用随机的金额支付一笔订单,并作相应历史纪录。
主要特点:轻量级,读写频繁,要求响应快。
3.Delivery:发货(批处理交易)
事务内容:对于任意一个客户端,随机选取一个发货包,更新被处理订单的用户余额,并把该订单从新订单中删除。
主要特点:1-10 个批量,读写频率低,较宽松的响应时间
4.Order-Status:查询客户最近交易的状态
事务内容:对于任意一个客户端,从固定的仓库随机选取一个辖区及其内用户,读取其最后一条订单,显示订单内每件商品的状态。
主要特点:中量级,只读频率低,要求响应快
5.Stock-Level:查询仓库库存状况,以便能够及时补货。
主要特点:重量级,只读频率低,较宽松的响应时间。
各个类型的交易在系统中所占的比例:
1.New-Order:45%
2.Payment:43%
3.Delivery:4%
4.Order-Status:4%
5.Stock-Level:4%
2.3. TPCC输出指标
TPC-C测试的结果主要有两个指标,即流量指标(Throughput,简称tpmC)和性价比(Price/Performance,简称Price/tpmC)。
1.流量指标(tpmC):描述了系统在执行 Payment,Order-Status,Delivery,Stock-level 这四种交易的同时,每分钟可以处理的New-Order交易的数量。流量指标值越大越好。tpm是 transactions per minute的简称;C指TPC中的C基准程序。它的定义是每分钟内系统处理的新订单个数。要注意的是,在处理新订单的同时,系统还要按上图的要求处理其它4类事务请求。从图1可以看出,新订单请求不可能超出全部事务请求的45%,因此,当一个系统的性能为1000tpmC时,它每分钟实际处理的请求数是2000多个。
2.性价比(Price/Performance,简称Price/tpmc):即测试系统的整体价格与流量指标的比值,在获得相同的tpmC值的情况下,价格越低越好。
3. TPCC测试流程
现在业界主要用BenchmarkSQL5.0来进行测试,4.1.1的版本也有,但现在不多见了。此处下载:https://sourceforge.net/projects/benchmarksql/files/benchmarksql/。
所以本篇以BenchmarkSQL5.0为例。
还需下载PostgreSQL的驱动,然后放入lib目录下,不过解压BenchmarkSQL后默认会有PostgreSQL的驱动:https://jdbc.postgresql.org/download.html。另外还需要下载ant,yum装就行了。装好之后,在此目录下执行一下ant
-bash-4.2$ cd benchmarksql-5.0/-bash-4.2$ ls -ltotal 36-rwxr-xr-x 1 postgres postgres 1130 May 26 2016 build.xmldrwxr-xr-x 3 postgres postgres 4096 May 26 2016 doc-rwxr-xr-x 1 postgres postgres 6376 May 26 2016 HOW-TO-RUN.txtdrwxr-xr-x 5 postgres postgres 4096 May 26 2016 lib-rwxr-xr-x 1 postgres postgres 5318 May 26 2016 README.mddrwxr-xr-x 7 postgres postgres 4096 May 26 2016 rundrwxr-xr-x 6 postgres postgres 4096 May 26 2016 src-bash-4.2$ pwd/var/lib/pgsql/benchmarksql-5.0-bash-4.2$ antBuildfile: /var/lib/pgsql/benchmarksql-5.0/build.xml init: [mkdir] Created dir: /var/lib/pgsql/benchmarksql-5.0/build compile: [javac] Compiling 11 source files to /var/lib/pgsql/benchmarksql-5.0/build dist: [mkdir] Created dir: /var/lib/pgsql/benchmarksql-5.0/dist [jar] Building jar: /var/lib/pgsql/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar BUILD SUCCESSFULTotal time: 1 second |
db=postgresdriver=org.postgresql.Driverconn=jdbc:postgresql://localhost:5432/postgresuser=benchmarksqlpassword=PWbmsql warehouses=1loadWorkers=4 terminals=1//To run specified transactions per terminal- runMins must equal zerorunTxnsPerTerminal=10//To run for specified minutes- runTxnsPerTerminal must equal zerorunMins=0//Number of total transactions per minutelimitTxnsPerMin=300 //Set to true to run in 4.x compatible mode. Set to false to use the//entire configured database evenly.terminalWarehouseFixed=true //The following five values must add up to 100//The default percentages of 45, 43, 4, 4 & 4 match the TPC-C specnewOrderWeight=45paymentWeight=43orderStatusWeight=4deliveryWeight=4stockLevelWeight=4 // Directory name to create for collecting detailed result data.// Comment this out to suppress.resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tSosCollectorScript=./misc/os_collector_linux.pyosCollectorInterval=1//osCollectorSSHAddr=user@dbhostosCollectorDevices=net_eth0 blk_sda |