PostgreSQL从入门到精通教程 - 第45讲:poc-tpcc测试

news2024/11/18 17:37:48

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。

第45讲:POC-TPCC测试

PostgreSQL第45讲:3月2日(周六)19:30,钉钉群& 视频号(数据库老陈)直播

内容1:TPC-C介绍

内容2:TPC-C测试部署

内容3:TPC-C报告

TPC背景介绍

TPC组织:

事务处理性能测试委员会TPC(Transaction process performance Council)是一个专门负责制定计算机事务处理能力测试标准并监督其执行的组织,其总部位于美国,针对数据库不同的使用场景TPC组织发布了多项测试标准,其中被业界广泛使用的有TPC-C 、TPC-E,TPC-H和TPC-DS,前两者应用到OLTP,后两者应用到OLAP场景。

OLTP与OLAP区别

联机事务处理OLTP(on-line transaction processing) 主要是执行基本日常的事务处理,比如数据库记录的增删查改。比如在银行的一笔交易记录,就是一个典型的事务。高并发,高性能,且满足事务的ACID特性。

联机分析处理OLAP(On-Line Analytical Processing) 是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态的报表系统。对实时性要求不高,数据量大

测试标准-OLTP

OLTP测试模型一直是TPC组织的重点测试标准,TPC-C测试模拟了一个比较复杂的OLTP应用环境, 是一个在线零售公司,此公司对10W种商品进行销售,TPC-E是对TPC-C升级版本,但是目前POC选型时普通使用的仍然是TPC-C标准,先简单介绍两个标准的差异

TPC-C介绍

TPC-C业务数据模型:

tpc-c模拟的是一个在线零售公司,假如以一个仓库为例,仓库对10W种商品进行销售,具备针对用户进行水平扩展的能力,即建立更多的仓库。

每个仓库负责10个区域,每个区域有单独的订单系统,每个区域管理3000个顾客,因此一个仓库负责3W个客户。树状图如下图

TPC-C业务数据模型:

TPC-C 业务涉及到的9张表以及ER图介绍:

1)ITEM 商品信息表:10w条商品信息,保持不变

2)warehouse 仓库表:按需库容,比如上图表示有W个仓库,则有W条记录

3)Stock 库存表:每个仓库有10W条商品的库存信息,因此总数目为W*10w

4)district区域表: 每个仓库管理10个区域,因此有W*10条记录

5) custoer客户表:每个仓库负责10个区域,每个区域管理3000个客户,因此客户数为W*3w

6 ) Order订单表:每次客户下单会生成一条记录,会持续增长,不删除,初始化为每个客户一条订单,因此初始值为W*3w

7) New-Order新订单表:没有发货的订单,发货后即删除,初始值为每个仓库9000条记录,因此为W*9000

8)order-line订单明细表:每个订单会购买5-15件商品(平均为10),对于每件商品都要记录到这里,因此它的数目约为Order的10倍,会持续增长,不删除,初始值为W*30w

9) history表:历史信息表,没有主键,不需要查询,每次支付的时候生成一条记录,初始值为W*3w条

TPC-C业务数据模型:

TPC-C测试部署

1、安装JAVA (root)

gzip -d jdk-8u40-linux-x64.gz

tar –vxf jdk-8u40-linux-x64 -C /usr/local

2、安装ant (root)

unzip apache-ant-1.9.15-bin.zip

mv apache-ant-1.9.15 /usr/local/

3、配置pg环境变量

export JAVA_HOME=/usr/local/jdk1.8.0_40

export PATH=$JAVA_HOME/bin:$PATH:/usr/local/apache-ant-1.9.15/bin/

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib:/usr/local/apache-ant-1.9.15/lib/ant-launcher.jar

4、解压安装包benchmarksql (pg)

unzip benchmarksql-5.0.zip

cd benchmarksql-5.0/

ant #执行ant命令

5、编辑PG相关运行参数

cd run/

vim props.pg

props.pg文件内容:

db=postgres

driver=org.postgresql.Driver

conn=jdbc:postgresql://localhost:1922/tpcc

user=tpcc

password=123456

//warehouses与后面生成数据时指定的warehouses值要一致,根据客户实际的需求设置

warehouses=10

//并发客户端

terminals=10

runTxnsPerTerminal=0

//运行时长,单位为分钟

runMins=3

limitTxnsPerMin=10000

//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 spec,测试结果要达到下面每张表的交易要求才算通过

newOrderWeight=45

paymentWeight=43

orderStatusWeight=4

deliveryWeight=4

stockLevelWeight=4

6、PG数据库上创建tpcc数据库以及tpcc用户,密码为123456

7、建立测试库,并加载数据

./runDatabaseBuild.sh props.pg

8、运行基准测试

./runBenchmark.sh props.pg

测试结果

07:55:13,970 [Thread-1] INFO jTPCC : Term-00,

07:55:13,970 [Thread-1] INFO jTPCC : Term-00,

07:55:13,970 [Thread-1] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 3814.05

07:55:13,970 [Thread-1] INFO jTPCC : Term-00, Measured tpmTOTAL = 8499.38

07:55:13,970 [Thread-1] INFO jTPCC : Term-00, Session Start = 2022-01-04 07:52:13

07:55:13,970 [Thread-1] INFO jTPCC : Term-00, Session End = 2022-01-04 07:55:13

07:55:13,970 [Thread-1] INFO jTPCC : Term-00, Transaction Count = 25499

3814.05 TpmC //每分钟处理完成的事务数,该值=第一次统计结果 new-order成功事务数/总运行时间(分钟)

生成html测试结果

1、安装R命令

yum install epel-release

yum install R

2、产生html报告

./generateReport.sh my_result_2022-01-17_094510

3、报告指标

New-Order :新订单

Payment:支付

Order-Status:订单查询

Delivery:发货

Stock-Level :库存

4、html报告(5个仓库)

[transaction percentage]

New-Orders:45.112%(>=45.0%) [OK]

Payment: 42.681% (>=43.0%) [NG]

Order-Status: 4.166% (>= 4.0%) [OK]

Delivery: 4.017% (>= 4.0%) [OK]

Stock-Level: 4.024% (>= 4.0%) [OK]

[response time (at least 90% passed)] //响应耗时指标必须超过90%通过才行

New-Order: 99.481% [OK]

Payment: 99.4% [OK]

Order-Status: 99.97% [OK]

Delivery: 99.99% [OK]

Stock-Level: 99.72% [OK]

Overall tpmC: 4324.00

Overall tpmTotal: 9585.00

4、html报告(10个仓库)

[transaction percentage]

New-Orders:44.687%(<=45.0%) [NG]

Payment: 43.293% (>=43.0%) [OK]

Order-Status: 3.904% (<= 4.0%) [NG]

Delivery: 4.204% (>= 4.0%) [OK]

Stock-Level: 3.912% (<= 4.0%) [NG]

[response time (at least 90% passed)] //响应耗时指标必须超过90%通过才行

New-Order: 99.06% [OK]

Payment: 99.01% [OK]

Order-Status: 99.62%[OK]

Delivery: 99.93% [OK]

Stock-Level: 99.83% [OK]

Overall tpmC: 3975.33

Overall tpmTotal: 8896.00

数据一致性验证

6条验证数据一致性的sql,通过验证仓库和区域收入是否相等来判断数据是否一致,预期以下6条sql结果都为0

第一条:

SELECT distinct w_ytd - ytd_sum

FROM bmsql_warehouse LEFT JOIN

(SELECT d_w_id, SUM(d_ytd) AS ytd_sum

FROM bmsql_district

GROUP BY d_w_id) d

ON w_id = d_w_id;

第二条:

select distinct * from

(SELECT (D_NEXT_O_ID - 1 - max_o_id) as id

FROM bmsql_district LEFT JOIN

(SELECT o_w_id, o_d_id, MAX(o_id) AS max_o_id

FROM bmsql_oorder

GROUP BY o_w_id, o_d_id) o

ON d_w_id = o_w_id AND d_id = o_d_id

ORDER BY d_w_id, d_id) tmp ;

第三条:

select distinct * from

(SELECT D_NEXT_O_ID - 1 - max_o_id

FROM bmsql_district LEFT JOIN

(SELECT no_w_id, no_d_id, MAX(no_o_id) AS max_o_id

FROM bmsql_NEW_order

GROUP BY no_w_id, no_d_id)

no_w_id ON d_w_id = no_w_id

AND d_id = no_d_id

ORDER BY d_w_id, d_id) as tmp;

第四条:

select distinct (count(no_o_id)-(max(no_o_id)-min(no_o_id)+1)) as diff

from bmsql_NEW_order

group by no_w_id,no_d_id;

第五条:

select distinct * from

(SELECT sum_cnt - count_id

FROM

( SELECT o_w_id, o_d_id, SUM(o_ol_cnt) as sum_cnt

FROM bmsql_oorder

GROUP BY o_w_id, o_d_id ) o LEFT JOIN

( SELECT ol_w_id, ol_d_id, COUNT(ol_o_id) count_id FROM bmsql_order_line

GROUP BY ol_w_id, ol_d_id )

ol_w_id ON o_w_id =ol_w_id AND o_d_id = ol_d_id) tmp;

第六条:

SELECT distinct sum_ytd - w_ytd

FROM

( SELECT d_w_id, SUM(d_ytd) AS sum_ytd

FROM bmsql_district

GROUP BY d_w_id) d

LEFT JOIN bmsql_warehouse w ON d_w_id = w_id;

CUUG PostgreSQL技术大讲堂系列公开课第45讲-POC-TPCC测试的内容,往期视频及文档,请联系CUUG。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1478983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

共同应对共享挑战:2023 Open Source Congress 报告(中文版)

开源社受邀参加了 2023 年 7 月底在瑞士日内瓦举办的 2023 Open Source Congress&#xff0c;并发布了一篇会议速览&#xff1b;之后 LFAPAC 发布了会议总结报告&#xff08;英文版&#xff09;&#xff0c;开源社国际接轨工作组的翻译志愿者们群策群力地翻译了该总结报告。 【…

10-Linux部署ElasticSearch

Linux部署ElasticSearch 简介 全文搜索属于最常见的需求&#xff0c;开源的 Elasticsearch &#xff08;以下简称 es&#xff09;是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。 Elasticsearch简称es&…

本地写的Bash脚本,Linux端运行报错:/bin/bash^M: bad interpreter: No such file or directory

背景 在本地写了个Bash Shell脚本&#xff0c;但上传到Linux端后加完权限执行时报错&#xff1a; &#xff08;脚本名&#xff1a;script.sh&#xff09; -bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory 分析 这个错误通常是由于脚本文件的行…

【kubernetes】关于云原生之k8s集群中pod的容器资源限制和三种探针

目录 一、关于pod容器的资源限制 1.1资源限制的单位 CPU 资源单位 内存 资源单位 二、关于QOS服务质量&#xff08;pod的调度和驱逐有限制&#xff09; 2.1QoS服务质量分类 guaranteed验证 burstable验证 besteffort验证 2.2驱逐顺序 三、关于pod容器的三种探针 3.…

【数据结构与算法】回溯法解题20240301

这里写目录标题 一、78. 子集1、nums [1,2,3]为例把求子集抽象为树型结构2、回溯三部曲 二、90. 子集 II1、本题搜索的过程抽象成树形结构如下&#xff1a; 三、39. 组合总和1、回溯三部曲2、剪枝优化 四、LCR 082. 组合总和 II1、思路2、树形结构如图所示&#xff1a;3、回溯…

命令行启动mongodb服务器的问题及解决方案 -- Unrecognized option: storage.journal

目录 mongodb命令行启动问题 -- Unrecognized option: storage.journal问题日志&#xff1a;问题截图&#xff1a;问题来源&#xff1a;错误原因&#xff1a;解决方式&#xff1a; mongodb命令行启动问题 – Unrecognized option: storage.journal 同样是格式出问题的问题分析和…

视频在线压缩

video2edit 一款免费的在线视频编辑软件&#xff0c;可以进行视频合并、视频剪辑、视频压缩以及转换视频格式等。 链接地址&#xff1a;在线视频编辑器和转换器 - 编辑&#xff0c;转换和压缩视频文件 打开视频压缩页面&#xff0c;上传想要压缩视频&#xff0c;支持MP4&…

SpringCloud搭建微服务之Consul服务注册与发现

1. Consul介绍 Consul是由HashiCorp公司使用Go语言开发的一款开源工具&#xff0c;主要用于实现分布式系统的服务发现和服务配置&#xff0c;其内置了服务注册与发现框架、分布式一致性协议实现、健康检查、Key-Value存储、多数据中心方案。Consul具有高可移植性&#xff0c;支…

LTE 网络与互联网的连接

LTE 网络与互联网的连接 当用户设备 UE&#xff08;如手机&#xff09;开机后&#xff0c;就登记到 LTE 网络&#xff0c;以便使用网络资源传送 IP 数据业务。 LTE 网络内的数据路径由两大部分组成&#xff1a; -空口无线链路&#xff08;UE→eNB&#xff09;。 -核心网中的隧…

【菜鸟入门!】Matlab零基础快速入门教程

数学建模竞赛中&#xff0c;编程软件是必不可缺少的&#xff0c;比如大家都熟知的MATLAB多数同学们都会经常用到&#xff0c;今天给大家介绍一些MATLAB的基本元素&#xff0c;希望帮助大家更好的掌握编写基本的函数&#xff01; 变量和数组 MATLAB 程序的基本数据单元是数组。一…

Opencv实战(5)平滑处理与常见函数

平滑处理 Opencv实战&#xff1a; Opencv(1)读取与图像操作 Opencv(2)绘图与图像操作 Opencv(3)详解霍夫变换 Opencv(4)详解轮廓 文章目录 平滑处理1.均值滤波2.方框滤波3.高斯滤波4.中值滤波5.双边滤波 常见函数(1).createTrackbar()(2).SetMouseCallback() 图像的平滑处理是…

Intel 芯片 Mac 如何重新安装系统

使用可引导安装器重新安装&#xff08;可用于安装非最新的 Mac OS&#xff0c;系统降级&#xff0c;需要清除所有数据&#xff0c;过程确保连接上网络&#xff0c;虽然这种方式不会下载 Mac OS&#xff0c;但是需要下载固件等信息&#xff09; 插入制作好的可引导安装器&#x…

使用docker方式测试部署django项目(客户催)

需求 1&#xff1a;已有django项目–weidanyewu 2&#xff1a;希望在服务器上测试部署–客户催 3&#xff1a;没完善django的启动 4&#xff1a;使用临时数据库进行演示 5&#xff1a;使用python3.10版本镜像 6&#xff1a;展示端口80 7&#xff1a;后台执行django程序 8&#…

信号系统之滤波器比较

比较 1&#xff1a;模拟与数字滤波器 大多数数字信号源自模拟电子设备。**如果需要对信号进行滤波&#xff0c;是在数字化之前使用模拟滤波器&#xff0c;还是在数字化后使用数字滤波器更好&#xff1f;**将通过两个对比来回答问题。 目标是提供 1 kHz的低通滤波器。模拟端是…

2023全球软件开发大会-上海站:探索技术前沿,共筑未来软件生态(附大会核心PPT下载)

随着信息技术的迅猛发展&#xff0c;全球软件开发大会&#xff08;QCon&#xff09;已成为软件行业最具影响力的年度盛会之一。2023年&#xff0c;QCon再次来到上海&#xff0c;汇聚了众多业界精英、技术领袖和开发者&#xff0c;共同探讨软件开发的最新趋势和实践。 一、大会…

网络安全攻防演练:企业蓝队建设指南

第一章 概述 背景 网络实战攻防演习是当前国家、重要机关、企业组织用来检验网络安全防御能力的重要手段之一,是对当下关键信息系统基础设施网络安全保护工作的重要组成部分。网络攻防实战演习通常是以实际运行的信息系统为攻击目标,通过在一定规则限定下的实战攻防对抗,最…

Django学习笔记-查询及修改MySQL数据库表的所有信息

1.在index中添加一个按钮,用于查询数据 2.urls配置find 3.views定义find,获取PopulationModel模型所有数据渲染到show.html页面上 4.创建show.html,遍历modellist的数据渲染到表格中显示 5.点击查询后页面显示如下 6.添加修改按钮,点击按钮,执行update,urls配置update …

R语言数学建模(二)—— tidymodels

R语言数学建模&#xff08;二&#xff09;—— tidymodels 文章目录 R语言数学建模&#xff08;二&#xff09;—— tidymodels前言一、示例数据集二、拆分数据集2.1 拆分数据集的常用方法2.2 验证集2.3 多层次数据2.4 其他需考虑问题 三、parsnip用于拟合模型3.1 创建模型3.2 …

面向对象编程入门:掌握C++类的基础(2/3):深入理解C++中的类成员函数

在C编程中&#xff0c;类是构建程序的基石&#xff0c;而理解类的默认成员函数对于高效使用C至关重要。本文将深入探讨这六个默认成员函数及其他相关概念&#xff0c;提供给读者一个全面的视角。 类的6个默认成员函数&#xff1a; 如果一个类中什么成员都没有&#xff0c;简称为…

PVE开启IPV6

echo "net.ipv6.conf.all.accept_ra2net.ipv6.conf.default.accept_ra2net.ipv6.conf.vmbr0.accept_ra2net.ipv6.conf.all.autoconf2net.ipv6.conf.default.autoconf2net.ipv6.conf.vmbr0.autoconf2" > /etc/sysctl.conf然后执行 sysctl -p最后再查询IP地址即可看…