目录
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,根据实际场景构造业务即可。