postgresql 客户端_PostgreSQL在TPCC场景下的PK

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模型。

5c8cbff9e624822d9cf6560ae49c9d3b.png

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
至此准备工作就绪。BenchmarkSQL的配置文件在run目录下,此处基于PostgreSQL,所以需要关心props.pg,参数较多,一个一个来
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
warehouse指“仓库”数量,每个warehouse大小大概是100MB,如果该参数设置为10,那整个数据库的大小大概在1000MB。建议将数据库的大小设置为服务器物理内存的2-5倍。 loadworkers用于在数据库中初始化数据的加载进程数量,默认为4,实际使用过程中可以根据实际情况调整,如32,加载速度会随worker数量的增加而有所提升。 terminals指的是并发连接数,也就是终端数量,指同时有多少终端并发执行,表示并发程度。建议设置为服务器CPU核数的2-6倍。 runTxnsPerTerminal指每个终端运行的固定事务数量,也就是每分钟每个终端执行的事务数。如果该值设置为10,意味着每个终端运行10个事务,如果有32个终端,那整体运行320个事务后,测试结束。该参数配置为非0值时,runMins参数必须设置为0。 runMins=20指要测试的整体时间,单位为分钟,如果ru nMins设置为60,那么测试持续1小时候结束。该值设置为非0值时,runTxnsPerTerminal参数必须设置为0。这两个参数不能同时设 置为正整数,如果设置其中一个,另一个必须为0,不然就会提示:ERROR  jTPCC : Term-00, Must indicate either transactions per terminal or number of run minutes! 主要区别是runMins定义时间长度来控制测试时间;runTxnsPerTerminal定义事务总数来控制时间。 limitTxnsPerMin=300 Number of total transactions per minute,每分钟事务总数限制,该参数主要控制每分钟处理的事务数ÿ
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值