TPC-H工具使用
一、TPC系列
- 交易处理效能委员会(TPC, Transaction Processing Performance Council)组织制定。
- TPC-C主要测试数据库系统的事务处理能力。
- TPC-App用于测试7*24环境下B2B的应用服务和Web服务能力。
- TPC-E大型企业信息服务测试基准。
- TPC-H主要评价特点查询的决策支持能力,强调在数据挖掘和分析处理方面的能力。
二、最新2.18.0 TPC-H标准
8个关系表:customer.tbl、lineitem.tbl、nation.tbl、orders.tbl、partsupp.tbl、part.tbl、region.tbl、supplier.tbl,其中,nation.tbl和region.tbl表数据量不变,其它表数据量与比例因子(SF)有关。
数据库关系图:
- 数据量支持1G~100T。
- 可以SF值:1、10、30、100、300、1000、3000、10000、30000、100000。
- 22个SQL复杂程度超过大多数实际OLTP应用,在22个查询执行同时,还有一对更新操作RF1和RF2,RF1向orders.tbl和lineitem.tbl表插入原数据行数的0.1%的新行,RF2从orders.tbl和lineitem.tbl表中删除与R1增加的等量数据行,即,更新后数据量不变。RF1本质是Insert命令,而RF2是Delete命令。
- Power测试:随机执行22条查询流中的一条测试流和2条测试流中的一条,考核指标:QppH@Size;
- Throughout测试执行多条查询流和一条更新流的混合操作,考核指标:QthH@Size。
- Power测试和Throughout测试通过数理方式合成的结果是TPC-H基准测试中的关键指标:QphH@Size,每小时数据查询数,是QppH@Size和QthH@Size结果的乘积的1/2次方。
- SQL语法遵循SQL-92标准。
- TPC-H三个子测试:数据装载测试、Power测试和Throughout测试。
三、TPC-H工具使用(MySQL为例)
下载TPC-H工具
编译
- snippet.bash
[yz@MiWiFi-R4A-srv ~]$ cd 2.18.0_rc2/ [yz@MiWiFi-R4A-srv 2.18.0_rc2]$ cd dbgen/
- snippet.bash
[yz@MiWiFi-R4A-srv dbgen]$ cp makefile.suite Makefile [yz@MiWiFi-R4A-srv dbgen]$ vim Makefile CC=gcc DATABASE=MYSQL MACHINE =LINUX WORKLOAD =TPCH
定义MySQL方言:
- snippet.bash
[yz@MiWiFi-R4A-srv dbgen]$ vim tpcd.h # 添加以下定义: #ifdef MYSQL #define GEN_QUERY_PLAN "" #define START_TRAN "" #define END_TRAN "" #define SET_OUTPUT "" #define SET_ROWCOUNT "limit %d;\n" #define SET_DBASE "" #endif
编译:
- snippet.bash
[yz@MiWiFi-R4A-srv dbgen]$ make
生成数据
dbgen -h命令可查看命令帮助。
-s 10表示产生10个Scale Factor数据,1SF=1GB数据。以生成1s数据为例:
- snippet.bash
[yz@MiWiFi-R4A-srv dbgen]$ ./dbgen -s 1 -f TPC-H Population Generator (Version 2.18.0) Copyright Transaction Processing Performance Council 1994 - 2010
生成数据如下:
- snippet.bash
[yz@MiWiFi-R4A-srv dbgen]$ ll *.tbl -rw-rw-r--. 1 yz yz 24346144 5月 19 20:56 customer.tbl -rw-rw-r--. 1 yz yz 759863287 5月 19 20:56 lineitem.tbl -rw-rw-r--. 1 yz yz 2224 5月 19 20:56 nation.tbl -rw-rw-r--. 1 yz yz 171952161 5月 19 20:56 orders.tbl -rw-rw-r--. 1 yz yz 118984616 5月 19 20:56 partsupp.tbl -rw-rw-r--. 1 yz yz 24135125 5月 19 20:56 part.tbl -rw-rw-r--. 1 yz yz 389 5月 19 20:56 region.tbl -rw-rw-r--. 1 yz yz 1409184 5月 19 20:56 supplier.tbl
生成的tbl文件行尾不加分隔符
默认情况下,dbgen生成的数据表以“|”分割列,行尾也有“|”分隔符,但是有些数据库的加载程序不支持以分隔符结尾,所以需要在生成数据后去除行尾的分隔符。
如果希望生成的数据行尾不带分隔符,需要对TPC-H tool代码做个小修订,编辑dbgen/config.h配置文件:
- snippet.c
#define EOL_HANDLING
重新编译。
生成查询SQL
- snippet.bash
[yz@MiWiFi-R4A-srv dbgen]$ DSS_QUERY=queries ./qgen -s 1 | sed -e 's/\r//' > tpch_query.sql
修改查询错误:
- snippet.sql
(1) "day (3)" => "day" (2) "limit -1" => "limit 1" (3) 去除"limit"前一行多余的分号(vim:%s/;\nlimit/^Mlimit) vim输入^M: Ctrl-v, Ctrl-m (4) query 13: "count(o_orderkey)" => "count(o_orderkey) as c_count" ") as c_orders (c_custkey, c_count)" => ") as c_orders" (5) query 15: s_suppkey; DROP VIEW revenue0 LIMIT 1; => s_suppkey LIMIT 1; DROP VIEW revenue0; (6) INTERVAL: INTERVAL 'i' DAY => INTERVAL i DAY INTERVAL 'j' MONTH => INTERVAL j MONTH INTERVAL 'k' YEAR => INTERVAL k YEAR (7) 删除头部注释行,用例内部不留空行,用例之间以2空行分隔
create view revenue0查询与其后面的select作为一个用例,且中间不留空行。
将tpch_querys.sql拆分为22个文件:q1.sql, q2.sql, …, q22.sql
- snippet.bash
[yz@MiWiFi-R4A-srv dbgen]$ awk -v RS="\n\n" 'BEGIN {n=1}{print $0 > "q"n++".sql"}' tpch_query.sql [yz@MiWiFi-R4A-srv dbgen]$ ls *.sql q10.sql q13.sql q16.sql q19.sql q21.sql q24.sql q3.sql q6.sql q9.sql q11.sql q14.sql q17.sql q1.sql q22.sql q25.sql q4.sql q7.sql q12.sql q15.sql q18.sql q20.sql q23.sql q2.sql q5.sql q8.sql
打赏作者以资鼓励: