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,一经查实,立即删除!

相关文章

蓝桥杯练习系统(算法训练)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;你…

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

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

学浪app中的视频怎么缓存

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

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

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

瑞_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协议在实…

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

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

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

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

【人工智能】猫狗识别

猫狗识别 实验背景 数据集介绍 我们使用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采用时间…

IDEA 导出jar无法执行 错误: 找不到或无法加载主类

1、首先配置正确Project Struct 保证需要引用的jar包库添加到Libraries里&#xff0c;尽管添加到Modules里依然可以测试运行或调试&#xff0c;但导出的jar包会遇到问题。 2、导出jar&#xff0c;方式选择如下 选择”From modules with dependencies" 然后去掉以上“Extr…

手机如何在线制作gif?轻松一键在线操作

现在大家都喜欢使用手机来拍摄记录有趣的事物&#xff0c;但是时间长了手机里的视频越来越多导致手机存储空间不够了&#xff0c;这些视频又不想删除时应该怎么办呢&#xff1f;这个很简单&#xff0c;下面就给大家分享一款不用下载手机就能操作的视频转gif网站-GIF中文网&…

【贪玩巴斯】Mac的M芯片(M1/2...)下载homebrew方法(24年最新且已验证可行)

1. 按照目前广为流传的方法&#xff08;M1会出现一些问题&#xff09;&#xff1a; 终端输入&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 使用国内镜像下载。 2. 输入后按照要求步骤执行即可&#xff…

k8s单节点部署,容器运行时使用containerd

环境 系统 &#xff1a; entOS Linux release 7.9.2009 (CoreIP&#xff1a;192.168.44.177 硬件要求&#xff1a;控制平面最少需要 2c2g 安装前环境准备 如果是集群部署还需要配置时间同步 关闭防火墙 systemctl disable firewalld关闭selinux setenforce 0sed -i s/SELI…

Vue - 你知道Vue组件中的data为什么是一个函数吗

难度级别:中高级及以上 提问概率:80% 在Vue项目中,App.vue下的每个子组件都会生成一个单独的Vue实例对象,但这些子对象都是通过通过vue.extend方法创建而来的,也就是说我们平时在项目中所定义的Vue组件,都有一个相同的父类对象。这样也就…

JS-PC/MOBILE技巧--PC

一、PC 端网页特效 1、元素偏移量 offset 系列 offset 概述 offset 就是偏移量&#xff0c;使用 offset 系列相关属性可以动态的得到该元素的位置&#xff08;偏移&#xff09;、大小等。 获取元素距离带有定位父元素的位置获取元素自身的大小&#xff08;宽度高度&#xff0…

前端入门(认识HTML,CSS,JavaScript三件套)

目录 前言 HTML&#xff08;构建&#xff09; CSS&#xff08;设计&#xff09; JavaScript&#xff08;互动&#xff09; 总结 相关书籍推荐 前言 前端&#xff08;Frontend&#xff09;指的是与用户直接交互的部分&#xff0c;也称为客户端。在网站或者应用程序中&…