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

news2024/11/14 6:06:17

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

第46讲:POC-TPCH测试

内容1:TPC-H介绍

内容2:TPC-H测试部署

内容3:TPC-H报告

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) 是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态的报表系统。对实时性要求不高,数据量大

测试标准-OLAP

随着开源Hapdoop、Spark、HDFS、HBASE等技术的商用化,大数据管理技术得到了突飞猛进的发展,为了更客观地比较不同数据管理系统,TPC组织牵头制定了大数据测试基准TPC-H,TPC-DS,后者是TPC组织在TPC-H基础上的升级版本,下面介绍一下两者差异以及TPC-DS的SQL覆盖

TPC-H测试简介

TPC-H是事务处理性能委员会( Transaction ProcessingPerformance Council )制定的基准程序之一。

TPC- H 主要目的是评测数据库系统在统计分析、数据挖掘、分析处理等决策支持方面的能力。

该基准模拟了决策支持系统中的数据库操作,测试数据库系统复杂查询的响应时间,以每小时执行的查询数(TPC-H QphH@Siz)作为度量指标。

TPC-H基准模型中定义了一个数据库模型,容量可以在1GB~10000GB的8个级别中进行选择。数据库模型包括CUSTOMER、LINEITEM、NATION、ORDERS、PART、PARTSUPP、REGION和SUPPLIER 8张数据表。

模拟商品零售业决策支持系统的 22 个查询,涉及22条复杂的select查询流语句和2条带有insert和delete程序段的更新流语句。SQL涵盖了统计分组、排序、聚集操作、子查询、多表关联等复杂操作,可以测试各个查询的响应时间。

TPC-H查询语句简介

Q1语句是查询lineItems的一个定价总结报告

在单个表lineitem上查询某个时间段内,对已经付款的、已经运送的等各类商品进行统计,包括业务量的计费、发货、折扣、税、平均价格等信息。

Q1语句的特点是:带有分组、排序、聚集操作并存的单表查询操作。这个查询会导致表上的数据有95%到97%行被读取到。

Q2语句是查询最小代价供货商查询

Q2语句查询获得最小代价的供货商。得到给定的区域内,对于指定的零件(某一类型和大小的零件),哪个供应者能以最低的价格供应它,就可以选择哪个供应者来订货。

Q2语句的特点是:带有排序、聚集操作、子查询并存的多表查询操作。查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。

Q3语句是查询运送优先级

Q3语句查询得到收入在前10位的尚未运送的订单。在指定的日期之前还没有运送的订单中具有最大收入的订单的运送优先级(订单按照收入的降序排序)和潜在的收入(潜在的收入为l_extendedprice * (1-l_discount)的和)。

Q3语句的特点是:带有分组、排序、聚集操作并存的三表查询操作。查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前10行(通常依赖于应用程序实现)。

TPC-H测试部署

1、软件安装

$ unzip tpc-h-tools-2.17.3.zip

$ cd 2.17.3/

$ cd dbgen/

$ cp makefile.suite makefile

#编辑makefile (修改如下内容 (第 109行左右),下面内容区别大小写)

CC=gcc

DATABASE=ORACLE

MACHINE=LINUX

WORKLOAD=TPCH

#编译

$ make

2、产生数据模板

让我们使用dbgen工具生成数据-有一个重要的参数“scale”影响数据量。它大致相当于原始数据的GB数,所以要生成5GB的数据,注意当前是否有足够的空间。

./dbgen -s 5

它以类似于Oracle的CSV格式创建一堆.tbl文件,ls *.tbl查看。

3、要将它们转换为与PostgreSQL兼容的CSV格式,请执行以下操作

for i in `ls *.tbl`; do sed 's/|$//' $i > ${i/tbl/csv}; echo $i; done;

执行完成后可以把.tbl文件删除,否则占用空间,现在我们有八个CSV文件可以加载到数据库中。但我们必须先创造它。

4、安装pg_tpch_master软件,提供测试脚本:

unzip pg_tpch-master.zip

cd pg_tpch-master

cp -rf dss /soft/2.17.3/dbgen/ #/soft是存放tpch软件的目录,后面需要dss目录下的文件

5、创建数据库并加载数据

尽管TPC-H规范描述了数据库结构,但create脚本不是包的一部分。PG准备了一个创建所有表的创建脚本和一个创建外键的alter脚本(在填充数据库之后),需要先创建一个数据库tpch然后再创建表。

$ cd /soft/2.17.3/dbgen/dss

$ psql tpch < tpch-create.sql

把前面由八个.tbl 转化为CSV文件mv到当前路径的data目录下,data目录需要自己创建。

$ mkdir data

$ mv /soft/2.17.3/dbgen/*.csv data/

6、用生成的数据填充数据库

在/soft/2.17.3/dbgen/dss目录下创建脚本load.sql,加入如下内容:

dir=`pwd`/data

opts="-h localhost tpch"

psql $opts -c "COPY part FROM '$dir/part.csv' WITH (FORMAT csv, DELIMITER '|')"

psql $opts -c "COPY region FROM '$dir/region.csv' WITH (FORMAT csv, DELIMITER '|')"

psql $opts -c "COPY nation FROM '$dir/nation.csv' WITH (FORMAT csv, DELIMITER '|')"

psql $opts -c "COPY supplier FROM '$dir/supplier.csv' WITH (FORMAT csv, DELIMITER '|')"

psql $opts -c "COPY customer FROM '$dir/customer.csv' WITH (FORMAT csv, DELIMITER '|')"

psql $opts -c "COPY partsupp FROM '$dir/partsupp.csv' WITH (FORMAT csv, DELIMITER '|')"

psql $opts -c "COPY orders FROM '$dir/orders.csv' WITH (FORMAT csv, DELIMITER '|')"

psql $opts -c "COPY lineitem FROM '$dir/lineitem.csv' WITH (FORMAT csv, DELIMITER '|') "

#执行该脚本,导入数据:

sh load.sql

7、最后创建约束

psql tpch < tpch-pkeys.sql --先创建主键

psql tpch < tpch-alter.sql --创建外键

8、产生sql语句:

现在我们必须从TPC-H基准中指定的模板生成查询。在tpch.org上提供的模板不适合PostgreSQL。因此,在“dss/templates”目录中提供了稍加修改的查询,应该将这些查询放在“dss/querys”目录中。进入到dbgen目录下,(必须要在此目录中)

$ cd /soft/2.17.3/dbgen

--创建存放sql语句的目录:

$ mkdir dss/queries

--产生sql语句:

for q in `seq 1 22`

do

DSS_QUERY=dss/templates ./qgen $q >> dss/queries/$q.sql

sed 's/^select/explain select/' dss/queries/$q.sql > dss/queries/$q.explain.sql

cat dss/queries/$q.sql >> dss/queries/$q.explain.sql;

done

8、产生sql语句(续):

现在,dss/querys目录中应该有44个文件。其中22个将实际运行查询,另外22个将生成查询的解释计划(不实际运行)。

自此,数据加载完成,同时产生sql语句,可以调用里面的sql语句执行。

9、产生工作负载集

--从查询模板中把22个查询集中产生一个压力测试的sql脚本:

DSS_QUERY=dss/queries ./qgen > dss/workload.sql

--指定某些查询模板产生工作负载集:

DSS_QUERY=dss/queries ./qgen 1 2 3 > dss/1_2_3_workload.sql

9、产生工作负载集

--指定1-10的查询模板产生工作负载集:

for r in `seq 1 10`

do

rn=$((`cat /dev/urandom|od -N3 -An -i` % 10000))

DSS_QUERY=dss/queries ./qgen -r $rn >> dss/1_to_10_workload.sql

done

10、执行压力测试脚本

前面我们以及生成了数据集,产生了压力测试的脚本,接下来需要去执行它,执行的方式有很多种,根据实际测试的要求去运行。

--简单的执行测试脚本,可以执行如下命令:

psql tpch < workload.sql

这个查询只是产生工作量,没有产生有关统计分析后的信息。

10、执行压力测试脚本

--生成一组结果日志,其中包含每个工作负载的秒数。从各种工具(iostat、vmstat等等)收集数据。

先准备workload-1.sql-workload-4.sql 4个脚本,然后再写一个脚本,调用该脚本:

DSS_QUERY=dss/queries ./qgen 1 > dss/workload-1.sql #根据这个命令产生1-4的压力脚本

#start the processes

for c in `seq 1 4`

do

/usr/bin/time -f "total=%e" -o result-$c.log \

psql tpch < workload-$c.sql > /dev/null 2>&1 &

done;

# wait for the processes

for p in `jobs -p`

do

wait $p;

done;

结合JeMeter产生测试报告

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

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

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

相关文章

【计算机网络】概述

文章目录 一、Internet 因特网1.1 网络、互联网、因特网1.2 因特网的组成 二、三种交换方式2.1 电路交换 &#xff08;Circuit Switching&#xff09;2.2 *分组交换 &#xff08;Packet Switching&#xff09;2.3 报文交换 &#xff08;Message Switching&#xff09; 三、计算…

基于Verilog的简易CPU设计

前言 本篇文章将简单讲解CPU之间各部分的功能及接线&#xff0c;并提供Verilog模拟CPU的各个组成部分。该CPU可以完成一些操作&#xff0c;如&#xff1a;加减法&#xff0c;与或&#xff0c;指令跳转等&#xff0c;最后提供testbench用于测试该CPU的工作情况是否符合预期。 C…

雷卯推荐基于USB 快充(USB-PD) 浪涌保护器件

USB PD 从2010年USB BC1.2 &#xff1a;单一5V 1.5A&#xff0c;到2021 年USB PD 3.1&#xff0c;支持电压 5V、9V、15V 和 20V&#xff0c;28V、36V 和 48V, 充电功率同步提升至240W。应用范围从从手机、平板电脑、笔记本电脑&#xff0c;逐渐向显示器、服务器、电机驱动和通信…

企业架构设计方法与实践中的架构治理演进、架构评估方法、架构成熟度模型

企业架构设计方法与实践中的架构治理演进、架构评估方法、架构成熟度模型。 架构治理演进: 架构治理是指通过设立和执行一套政策和程序,来管理和控制一个组织的架构活动。架构治理演进是一个持续的过程,需要根据组织的实际情况进行定期审查和调整。 在演进过程中,重点需要…

Python学习01 python开发的准备工作 1.Python解释器的下载 2.Pycharm集成开发环境的安装

0.按照步骤&#xff0c;快速进行python的开发准备工作 1. Python解释器的下载 下载地址 https://www.python.org/ 选择对应你的系统的安装包 2.记得勾选这里将python加入你的路径中 3.有如下四个程序表明安装成功 4.点击上图中的第二个程序打开窗口检查解释器能否正常工作 输…

Flutter 多语言自动化本地化生成器

Flutter 多语言自动化本地化生成器 这是一个为Flutter设计的插件&#xff0c;通过从Excel表格提取的CSV文件自动生成Dart本地化文件&#xff0c;以简化应用程序本地化的流程。这个工具通过自动化创建多语言资源文件&#xff0c;简化了开发人员和翻译人员的工作流程。 特点 默…

MQTT.fx实现(MQTT Client)连接物联网平台(ThingsCloud )

目录 概述 1 ThingsCloud平台介绍 2 ThingsCloud创建项目 2.1 创建项目 2.2 创建数据类型 2.3 创建设备类型 3 发布和订阅主题 3.1 发布Topic 3.2 订阅主题Topic 4 使用MQTT.fx 测试ThingsClond 4.1 使用MQTT.fx连接ThingsClond 4.2 MQTT.fx 订阅ThingsCloud Messag…

Unity资源热更新----AssetBundle

13.1 资源热更新——AssetBundle1-1_哔哩哔哩_bilibili Resources 性能消耗较大 Resources文件夹大小不能超过2个G 获取AssetBundle中的资源 打包流程 选择图片后点击 创建文件夹&#xff0c;Editor优先编译 打包文件夹位置 using UnityEditor; using UnityEngine; public cla…

探索编程新纪元:Code GeeX、Copilot与通义灵码的智能辅助之旅

在人工智能技术日新月异的今天&#xff0c;编程领域的革新也正以前所未有的速度推进。新一代的编程辅助工具&#xff0c;如Code GeeX、Copilot和通义灵码&#xff0c;正在重塑开发者的工作流程&#xff0c;提升编程效率&#xff0c;并推动编程教育的普及。本文将深入探讨这三款…

已解决Keil报错unknown type name “u8“或/u16/u32

出现问题如下所示&#xff0c;提示错误unknown type name “u8“ 解决方法&#xff1a; 在头文件中加入如下即可解决 typedef uint8_t u8; 这个错误通常表示编译器无法识别“u8”这个类型名。在C/C中&#xff0c;通常使用“uint8_t”来表示8位无符号整数类型。如果代码中…

django-q轻量级定时任务制定

django-q ,celery&#xff0c;apschedule都可以作为python的选型&#xff0c;但是django-q更轻量级&#xff0c;可以定制想要的任务&#xff0c;通过消息中间件&#xff0c;来实现不太高并发的实现 官网介绍地址 django-q官网地址 本次测试的是python3.12版本 首先需要安装dja…

ELK日志管理实现的3种常见方法

ELK日志管理实现的3种常见方法 1. 日志收集方法 1.1 使用DaemonSet方式日志收集 通过将node节点的/var/log/pods目录挂载给以DaemonSet方式部署的logstash来读取容器日志,并将日志吐给kafka并分布写入Zookeeper数据库.再使用logstash将Zookeeper中的数据写入ES,并通过kibana…

C语言函数—递归

这方面内容涉及到栈的使用&#xff0c;我们的递归函数如果被执行那么系统将会自动的去创建一个栈&#xff0c;相关内容有机会单独写文章讲解 什么是递归&#xff1f; 程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;。 递归做为一种算法在程序设计语言中广泛…

基于单片机的恒压供水控制器设计

摘 要 随着我国现代化的进程不断加快&#xff0c;城市居民生活水平不断提高&#xff0c;随之而来的是房屋的翻新和重建&#xff0c;但建筑层数的不断增高&#xff0c;使得供水所需压力不断提高&#xff0c;若建筑设计时对压力判断不足&#xff0c;会导致供水时无法供应到高楼层…

643.子数组最大平均数

题目&#xff1a;给你一个由 n 个元素组成的整数数组 nums 和一个整数k。 找出平均数最大且长度为 k 的连续子数组&#xff0c;并输出该最大平均数。 任何误差小于10^-5 的答案都将被视为正确答案。 解题思路&#xff1a;规定了子数组的长度为k&#xff0c;因此可以通过寻找子…

新冠疫情仍处流行期,防疫不松懈

2024年2月北京市法定传染病疫情概况已公布&#xff0c;全市共报告了21种法定传染病&#xff0c;累计病例数达到88971例&#xff0c;不幸有12人因疾病离世。这些病例主要集中在病毒性肝炎、肺结核、百日咳、梅毒、新型冠状病毒感染、流行性感冒以及其他感染性腹泻病等。 值得一提…

概率论与数理统计(随机事件与概率)

1随机事件与概率 1.1随机事件及其运算规律 1.1.1运算 交换律结合律分配律德摩根律 1.2概率的定义及其确定方法 1.2.1概率的统计定义 频率 设在 n 次试验中&#xff0c;事件 A 发生了(A)次&#xff0c;则称为事件 A 发生的频率。 1.2.2概率的统计定义 在一组恒定不变的条…

Mybatis(搭建,CRUD,方法参数,XML映射文件,动态SQL)【详解】

目录 一.准备基础代码 Mybatis的通用配置 二. 基本CURD操作 1.查询-根据id查询一条 2.查询-查询数量 3.删除 4.新增 获取主键值 5.修改 6.查询-模糊查询 预编译SQL #{}与${}的区别【面试题】 三. Mybatis的方法参数与结果集 1.SQL里取方法参数的值 2.查询结果集…

react native常用插件

react-native-async-storage/async-storage 说明&#xff1a;AsyncStorage 是一个在 react-native 中轻量存储的库&#xff1b;跟 localStorage 类似&#xff0c;API 也几乎一样&#xff1b;存储的时候需要将存储内容转成字符串存储。 react-navigation/material-bottom-tabs …

Ubuntu Flask 运行 gunicorn+Nginx 部署

linux Ubuntu 下运行python 程序出现killed 原因&#xff1a;CPU或内存限制&#xff1a;在华为云上&#xff0c;你可能有CPU或内存使用的限制。例如&#xff0c;如果你使用的是一个固定大小的实例&#xff0c;那么超过该实例的CPU或内存限制可能会导致进程被杀死。 参考&am…