TPCH工具下载及用法

目录

1. 什么是TPCH?

2. 下载TPCH基准工具

3. 编译TPCH基准工具

3.1. 修改头文件

3.2. 修改编译文件

3.3. 执行编译

4. qgen 的用法

4.1. 异常处理

4.2 常见用法

5. dbgen 的用法

5.1. 语法说明

5.2. 常见用法

6. 总结


        

1. 什么是TPCH?

    TPC-H 是一个决策支持基准测试 (Decision Support Benchmark),用于模拟复杂的决策支持系统环境。主要测试数据库的查询和报表性能,通常用于评估数据库在处理大规模数据时的性能表现。

    TPC-H 基准测试由一组预定义的 SQL 查询组成,这些查询涉及大数据集上的多表连接、聚合等复杂操作。通过执行这些查询并测量其性能,可以评估数据库系统处理复杂决策支持工作负载的能力。

        

2. 下载TPCH基准工具

TPC官网

http://www.tpc.org/

GitHub 仓库(V 2.17.3)

https://github.com/gregrahn/tpch-kit

        

3. 编译TPCH基准工具

(这里以 GitHub 仓库下载的 2.17.3 版本为例)

3.1. 修改头文件

编辑项目定义的头文件 tpch-kit-master/dbgen/tpcd.h,不同的数据库使用不用的定义。文件中内置了一些数据库,比如 Oracle:

#ifdef ORACLE
......

根据自己需要使用的数据库配置,如果文件中已经包含了,那么不需要配置。如果没有可以参考下方,增加到文件中即可。

【Oracle定义】

#ifdef ORACLE
#define GEN_QUERY_PLAN ""
#define START_TRAN ""
#define END_TRAN ""
#define SET_OUTPUT ""
#define SET_ROWCOUNT "where rownum <= %d;\n"
#define SET_DBASE ""
#endif

【SQLServer定义】

#ifdef  SQLSERVER
#define GEN_QUERY_PLAN  "set showplan on\nset noexec on\ngo\n"
#define START_TRAN      "begin transaction\ngo\n"
#define END_TRAN        "commit transaction\ngo\n"
#define SET_OUTPUT      ""
#define SET_ROWCOUNT    "set rowcount %d\ngo\n\n"
#define SET_DBASE       "use %s\ngo\n"
#endif

【PostgreSQL定义】

#ifdef POSTGRESQL
#define GEN_QUERY_PLAN  "explain"
#define START_TRAN      "start transaction"
#define END_TRAN        "commit;"
#define SET_OUTPUT      ""
#define SET_ROWCOUNT    "limit %d;\n"
#define SET_DBASE       ""
#endif

【MySQL定义】

#ifdef MYSQL
#define GEN_QUERY_PLAN  ""
#define START_TRAN      "start transaction"
#define END_TRAN        "commit"
#define SET_OUTPUT      ""
#define SET_ROWCOUNT    "limit %d;\n"
#define SET_DBASE       "use %s;\n"
#endif

        

3.2. 修改编译文件

编辑编译文件 Makefile,找到如下内容按情况修改

################
## CHANGE NAME OF ANSI COMPILER HERE
################
CC      = gcc
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
#                                  SQLSERVER, SYBASE, ORACLE, VECTORWISE, POSTGRESQL
# Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS, MACOS
#                                  SGI, SUN, U2200, VMS, LINUX, WIN32
# Current values for WORKLOAD are:  TPCH
DATABASE = MYSQL
MACHINE  = LINUX
WORKLOAD = TPCH
  • DATABASE 指定需要编译的数据库

        

3.3. 执行编译

上述2个文件配置完成后执行 make 命令

        

编译完成后会自动生成2个执行文件

TPCH主要利用这两个工具来生成业务SQL和业务数据 

  • qgen:生成复杂查询SQL
  • dbgen:生成测试数据

        

4. qgen 的用法

  • qgen 是一个用于生成 TPC-H Benchmark 测试查询的工具

4.1. 异常处理

直接执行 qgen 会出现找不到的错误:

在执行前设置变量

export DSS_QUERY=./queries

再次执行qgen(成功),生成22条复杂查询SQL

        

4.2 常见用法

常用参数

-h      # 帮助
-c      # 保留模板中的注释
-d <n>  # 指定输出单条SQL(1~22)

【案例一】生成全部SQL(22条)

./qgen
  • 直接执行就行

        

【案例二】指定生成第3条SQL

./qgen -d 3

        

【案例三】保留注释

./qgen -c -d 3

        

5. dbgen 的用法

  • dbgen 是一个用于生成 TPC-H Benchmark 测试数据的工具

5.1. 语法说明

-h     # 帮助
-q     # 启用静默模式
-v     # 启用详细模式-f     # 覆盖现有文件
-s <n> # 比例因子,数据规模以GB为单位(默认: 1G)
-U <n> # 生成 <n> 更新设置-T     # 指定生成某张表的数据-T c   # 只生成cutomers表数据-T l   # 只生成nation/region表数据-T L   # 只生成lineitem表数据-T n   # 只生成nation表数据-T o   # 只生成orders/lineitem表数据-T O   # 只生成orders表数据-T p   # 只生成parts/partsupp表数据-T P   # 只生成parts表数据-T r   # 只生成region表数据-T s   # 只生成suppliers表数据-T S   # 只生成partsupp表数据

        

5.2. 常见用法

【案例一】生成1GB数据

./dbgen
  • 直接执行 dbgen 默认生成1GB数据,这些数据由8张表组成,所以生成8个文件 

        

【案例二】生成2GB数据,覆盖原有文件,并输出详细信息

./dbgen -vfs 2
  • -v:输出详细信息
  • -f:覆盖原有数据
  • -s:比例因子(单位:GB) 

        

【案例三】指定生成customer和nation表数据

./dbgen -T c
./dbgen -T n

        

6. 总结

下载TPCH工具后解压,进入到 dbgen 目录下,此时包含2个文件:

  • dss.ddl:创建表
  • dss.ri:创建索引

语法是通用的,基本在每个数据库都能用。

解压后需要修改2个文件:

  • tpcd.h:查看是否包含需要编译数据库的定义,若没有添加到下方即可
  • Makefile:编译配置,根据提示配置对应信息就行

修改后直接 make 编译,编译完成后生成2个文件:

  • dbgen:生成测试数据
  • qgen:生成复杂查询SQL

先生成数据,将数据导入数据库后再生成业务SQL,根据实际场景构造业务即可。

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

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

相关文章

【rabbitmq】rabbitmq与erlang的版本对应关系

rabbitmq与erlang的版本对应关系 https://www.rabbitmq.com/docs/which-erlang

蓝桥杯练习系统(算法训练)ALGO-957 P0703反置数

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 一个整数的反置数指的是把该整数的每一位数字的顺序颠倒过来所得到的另一个整数。如果一个整数的末尾是以0结尾&#xff0c;那么在它的…

网络基础知识入门

目录 一、局域网与广域网 1、局域网 2、广域网 二、协议 1、概念 2、协议的理解 3、协议的分层 1、分层 2、OSI七层模型 三、网络传输基本流程 1、报头 2、局域网通信原理 3、跨网络传输流程 四、IP地址和MAC地址 1、IP地址 2、MAC地址 3、两者的区别 一、局域…

三种算法实例(二分查找算法、插入排序算法、贪心算法)

当我们听到“算法”这个词时&#xff0c;很自然地会想到数学。然而实际上&#xff0c;许多算法并不涉及复杂数学&#xff0c;而是更多地依赖基本逻辑&#xff0c;这些逻辑在我们的日常生活中处处可见。 在正式探讨算法之前&#xff0c;有一个有趣的事实值得分享&#xff1a;你…

面试题:React的真实DOM和虚拟DOM的区别

真实DOM&#xff0c;就是文档对象类型&#xff0c;在页面上渲染的每一个节点都是一个真实DOM结构。 虚拟DOM&#xff0c;就是一个描述描述DOM结构的对象。 在创建虚拟DOM的目的就是为了更好将虚拟节点渲染到页面上&#xff0c;虚拟DOM对象的节点与真实DOM的属性是一一对应的。…

【云开发笔记NO.22】运用云原生产品打造技术中台

一、云原生产品与技术中台的结合点 云原生产品以其容器化、微服务化、自动化等特性&#xff0c;为技术中台的建设提供了强大的技术支持。容器化技术使得应用可以更容易地进行部署和管理&#xff0c;提高了应用的可移植性和弹性。微服务架构则让应用更加模块化&#xff0c;便于…

石器时代_单机版_1.0到9.0全部版本集_内附教程

一. 版本介绍图 二. 运行环境 pc单机&#xff0c;可在所有windows系统畅玩&#xff0c;内附安装教程。 三. 源码获取 https://githubs.xyz/y27.html

Android 11 添加系统属性

在初识Android 属性一文中提到&#xff0c;系统会默认加载以下文件 /system/etc/prop.default /system/build.prop /system_ext/build.prop /vendor/default.prop /vendor/build.prop /odm/etc/build.prop /product/build.prop /factory/factory.prop要弄清楚我们应该在哪里添…

学浪app中的视频怎么缓存

现在越来越多人在学浪app里面购买课程&#xff0c;有的课程有时间限制&#xff0c;想要下载下来&#xff0c;如果你还不知道下载的方法&#xff0c;可以看看我这篇文章&#xff0c;专门讲解如何缓存学浪app里面的课程 讲技术方法很多人可能听不懂&#xff0c;所以我就将技术融…

【项目实战】【Docker】【Git】【Linux】部署V2rayA项目

今天着手了一个全新领域的项目&#xff0c;从完全没有头绪到成功运行&#xff0c;记录一下具体的部署流程 github项目链接V2rayA 一开始拿到以后完全没有抓手&#xff0c;去阅读了一下他的帮助文档 写着能用docker运行&#xff0c;就去下载了一个Docker配置了一下 拉取代码到…

如何构建和安装 Go 程序

简介 到目前为止&#xff0c;在我们的《如何使用 Go 编程》系列中&#xff0c;您已经使用 go run 命令自动编译您的源代码并运行生成的可执行文件。虽然这个命令对于在命令行上测试代码很有用&#xff0c;但是要分发或部署应用程序&#xff0c;您需要将代码构建成一个可共享的…

瑞_23种设计模式_访问者模式

文章目录 1 访问者模式&#xff08;Visitor Pattern&#xff09;1.1 介绍1.2 概述1.3 访问者模式的结构1.4 访问者模式的优缺点1.5 访问者模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 拓展——双分派4.1 分派4.2 动态分派&#xff08;多态&am…

4.网络编程-websocket(golang)

目录 什么是websocket golang中使用websocket Server端 Client端 什么是websocket WebSocket是一种在互联网上提供全双工通信的协议&#xff0c;即允许服务器和客户端之间进行双向实时通信的网络技术。它是作为HTML5的一部分标准化的&#xff0c;旨在解决传统HTTP协议在实…

uniapp使用vuex

1、uniapp中使用vuex_uniapp使用vuex-CSDN博客 2、uniapp中使用vuex(store)模块的例子 - 简书 (jianshu.com) 3、vuex介绍及使用指南&#xff08;面向实战&#xff09;_vuex 实战应用-CSDN博客

工程中实践的微服务设计模式

大家好&#xff0c;我是 方圆。最近在读《微服务架构设计模式》&#xff0c;开始的时候我非常的好奇&#xff0c;因为在我印象中&#xff0c;设计模式是常说的那23种设计模式&#xff0c;而微服务的设计模式又是什么呢&#xff1f;这个问题也留给大家&#xff0c;在文末我会附上…

opencv图像处理技术(阈值处理与图像平滑)

进行图像处理时&#xff0c;常常需要对图像进行预处理以提取所需的信息或改善图像质量。阈值处理和图像平滑是两种常见的预处理技术。 阈值处理 阈值处理是一种图像分割技术&#xff0c;其基本思想是将图像中的像素值与一个或多个预先设定的阈值进行比较&#xff0c;根据比较…

PCL 线段到三角形的距离(3D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里沿用之前直线到三角形的距离计算思路: 1、首先,我们可以判断直线与三角形是否相交,相交则距离为0,这里可以参考之前的博客:PCL 计算一条射线与一个三角形的交点。 2、如果直线与三角形未相交,则只需要判断…

【人工智能】猫狗识别

猫狗识别 实验背景 数据集介绍 我们使用CIFAR10数据集。CIFAR10数据集包含60,000张32x32的彩色图片&#xff0c;10个类别&#xff0c;每个类包含6,000张。其中50,000张图片作为训练集&#xff0c;10000张作为验证集。这次我们只对其中的猫和狗两类进行预测。 图 1 CIFAR10 数据…

Windows11配置VUE开发环境

目录 一、按照nodejs二、命令安装npm cache clean --forcenpm install -g vue/clinpm install npm -gnpm install webpacknpm install vue-cli -g与npm install -g vue/cli区别npm install -g cnpm --registryhttps://registry.npm.taobao.orgnpm i yarn -g --verbosenpm i -g …

网络与并发编程(一)

并发编程介绍_串行_并行_并发的区别 串行、并行与并发的区别 串行(serial)&#xff1a;一个CPU上&#xff0c;按顺序完成多个任务并行(parallelism)&#xff1a;指的是任务数小于等于cpu核数&#xff0c;即任务真的是一起执行的并发(concurrency)&#xff1a;一个CPU采用时间…