TPC-H 基准测试是由 TPC-D(由 TPC 组织于 1994 年指定的标准,用于决策支持系统方面的测试基准)发展而来的.TPC-H 用 3NF 实现了一个数据仓库,共包含 8 个基本关系,其数据量可以设定从 1G~3T 不等。TPC-H 基准测试包括 22 个查询(Q1~Q22),其主要评价指标是各个查询的响应时间,即从提交查询到结果返回所需时间.TPC-H 基准测试的度量单位是每小时执行的查询数( QphH@size),其中 H 表示每小时系统执行复杂查询的平均次数,size 表示数据库规模的大小,它能够反映出系统在处理查询时的能力.TPC-H 是根据真实的生产运行环境来建模的,这使得它可以评估一些其他测试所不能评估的关键性能参数.总而言之,TPC 组织颁布的TPC-H 标准满足了数据仓库领域的测试需求,并且促使各个厂商以及研究机构将该项技术推向极限。
(*)详细介绍:https://blog.csdn.net/woshisap/article/details/44427899
硬件信息行查看Greenplum主节点与数据节点硬件详细信息
参考资料:https://yq.aliyun.com/articles/93?spm=a2c4e.11153940.blogcont98613.10.6e386c3eB5OOZf&commentId=29
下载地址:链接: https://pan.baidu.com/s/1RKdgfRBvAzZ-yllXO15fng 提取码: p781
编译软件参考:https://github.com/digoal/pg_tpch?spm=a2c4e.11153940.blogcont93.5.df104cd2p9viqS
#cd dbgen
#chmod 777 *.c *.h
# cp makefile.suite Makefile
103 CC = gcc
104 # Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
105 # SQLSERVER, SYBASE, ORACLE, VECTORWISE
106 # Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS,
107 # SGI, SUN, U2200, VMS, LINUX, WIN32
108 # Current values for WORKLOAD are: TPCH
109 DATABASE= ORACLE
110 MACHINE = LINUX
111 WORKLOAD = TPCH
# make
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o build.o build.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o driver.o driver.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o bm_utils.o bm_utils.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o rnd.o rnd.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o print.o print.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o load_stub.o load_stub.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o bcd2.o bcd2.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o speed_seed.o speed_seed.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o text.o text.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o permute.o permute.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o rng64.o rng64.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -O -o dbgen build.o driver.o bm_utils.o rnd.o print.o load_stub.o bcd2.o speed_seed.o text.o permute.o rng64.o -lm
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o qgen.o qgen.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o varsub.o varsub.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -O -o qgen build.o bm_utils.o qgen.o rnd.o varsub.o text.o bcd2.o permute.o speed_seed.o rng64.o -lm
# ./dbgen --help
./dbgen: invalid option -- '-'
ERROR: option '-' unknown.
TPC-H Population Generator (Version 2.14.3 build 0)
Copyright Transaction Processing Performance Council 1994 - 2010
USAGE:
dbgen [-{vf}][-T {pcsoPSOL}]
[-s
dbgen [-v] [-O m] [-s
Basic Options
===========================
-C
-f -- force. Overwrite existing files
-h -- display this message
-q -- enable QUIET mode
-s
-S
-U
-v -- enable VERBOSE mode
Advanced Options
===========================
-b -- load distributions for (default: dists.dss)
-d
-i
-T c -- generate cutomers ONLY
-T l -- generate nation/region ONLY
-T L -- generate lineitem ONLY
-T n -- generate nation ONLY
-T o -- generate orders/lineitem ONLY
-T O -- generate orders ONLY
-T p -- generate parts/partsupp ONLY
-T P -- generate parts ONLY
-T r -- generate region ONLY
-T s -- generate suppliers ONLY
-T S -- generate partsupp ONLY
To generate the SF=1 (1GB), validation database population, use:
dbgen -vf -s 1
To generate updates for a SF=1 (1GB), use:
dbgen -v -U 1 -s 1
以上常用的参数为:
-s 使用dbgen产生一些测试数据, -s 表示scale(单位为GB),根据需要测试的数据量指定:
$ time ./dbgen -s 50 -f
TPC-H Population Generator (Version 2.14.3)
Copyright Transaction Processing Performance Council 1994 - 2010
real 23m8.674s
user 22m8.985s
sys 0m59.560s
以上命令式生成50G的测试数据,用时23m
50G测试数据的分布情况
$ ll -h *.tbl
-rw-rw-r-- 1 gpadmin gpadmin 1.2G Sep 19 17:18 customer.tbl
-rw-rw-r-- 1 gpadmin gpadmin 37G Sep 19 17:18 lineitem.tbl
-rw-rw-r-- 1 gpadmin gpadmin 2.2K Sep 19 17:18 nation.tbl
-rw-rw-r-- 1 gpadmin gpadmin 8.3G Sep 19 17:18 orders.tbl
-rw-rw-r-- 1 gpadmin gpadmin 5.7G Sep 19 17:18 partsupp.tbl
-rw-rw-r-- 1 gpadmin gpadmin 1.2G Sep 19 17:18 part.tbl
-rw-rw-r-- 1 gpadmin gpadmin 389 Sep 19 17:18 region.tbl
-rw-rw-r-- 1 gpadmin gpadmin 69M Sep 19 17:18 supplier.tbl
$ time ./dbgen -s 200 -f
TPC-H Population Generator (Version 2.14.3)
Copyright Transaction Processing Performance Council 1994 - 2010
real 92m56.905s
user 88m27.882s
sys 4m28.157s
以上命令式生成200G的测试数据,用时92m56.905s
表的含义如下说明,详细请查看:https://blog.csdn.net/woshisap/article/details/44427899
$ head -n 2 customer.tbl
1|Customer#000000001|IVhzIApeRb ot,c,E|15|25-989-741-2988|711.56|BUILDING|to the even, regular platelets. regular, ironic epitaphs nag e|
2|Customer#000000002|XSTf4,NCwDVaWNe6tEgvwfmRchLXak|13|23-768-687-3665|121.65|AUTOMOBILE|l accounts. blithely ironic theodolites integrate boldly: caref|
******
$ head -n 2 part.tbl
1|goldenrod lavender spring chocolate lace|Manufacturer#1|Brand#13|PROMO BURNISHED COPPER|7|JUMBO PKG|901.00|ly. slyly ironi|
2|blush thistle blue yellow saddle|Manufacturer#1|Brand#13|LARGE BRUSHED BRASS|1|LG CASE|902.00|lar accounts amo|
*********
$ head -n 2 supplier.tbl
1|Supplier#000000001| N kD4on9OM Ipw3,gf0JBoQDd7tgrzrddZ|17|27-918-335-1736|5755.94|each slyly above the careful|
2|Supplier#000000002|89eJ5ksX3ImxJQBvxObC,|5|15-679-861-2259|4032.68| slyly bold instructions. idle dependen|
************
$ head -n 2 partsupp.tbl
1|2|3325|771.64|, even theodolites. regular, final theodolites eat after the carefully pending foxes. furiously regular deposits sleep slyly. carefully bold realms above the ironic dependencies haggle careful|
1|125002|8076|993.49|ven ideas. quickly even packages print. pending multipliers must have to are fluff|
*********
$ head -n 2 orders.tbl
1|1845001|O|218611.01|1996-01-02|5-LOW|Clerk#000047528|0|nstructions sleep furiously among |
2|3900082|O|59659.27|1996-12-01|1-URGENT|Clerk#000043958|0| foxes. pending accounts at the pending, silent asymptot|
***********
$ head -n 2 lineitem.tbl
1|7759468|384484|1|17|25960.36|0.04|0.02|N|O|1996-03-13|1996-02-12|1996-03-22|DELIVER IN PERSON|TRUCK|egular courts above the|
1|3365454|365455|2|36|54694.44|0.09|0.06|N|O|1996-04-12|1996-02-28|1996-04-20|TAKE BACK RETURN|MAIL|ly final dependencies: slyly bold |
**********
$ head -n 2 nation.tbl
0|ALGERIA|0| haggle. carefully final deposits detect slyly agai|
1|ARGENTINA|1|al foxes promise slyly according to the regular accounts. bold requests alon|
$ head -n 2 region.tbl
0|AFRICA|lar deposits. blithely final packages cajole. regular waters are final requests. regular accounts are according to |
1|AMERICA|hs use ironic, even requests. s|
下载创建于查询SQL: tpc-h测试SQL.zip
4.3.2.1 转化测试数据的格式
# for i in `ls *.tbl`; do sed 's/|$//' $i > ${i/tbl/csv}; done
4.3.2.2 删除tbl文件
#rm -rf *.tbl
4.3.2.3 加载数据脚本
# cat file-export-greenplum.sh
#!bin/bash
time psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "COPY tpc_h_test.part FROM '/greenplum/****/part.csv' WITH csv DELIMITER '|'";
time psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "COPY tpc_h_test.region FROM '/greenplum/****/region.csv' WITH csv DELIMITER '|'";
time psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "COPY tpc_h_test.nation FROM '/greenplum/****/nation.csv' WITH csv DELIMITER '|'";
time psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "COPY tpc_h_test.supplier FROM '/greenplum/****/supplier.csv' WITH csv DELIMITER '|'";
time psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "COPY tpc_h_test.customer FROM '/greenplum/****/customer.csv' WITH csv DELIMITER '|'";
time psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "COPY tpc_h_test.partsupp FROM '/greenplum/****/partsupp.csv' WITH csv DELIMITER '|'";
time psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "COPY tpc_h_test.orders FROM '/greenplum/****/orders.csv' WITH csv DELIMITER '|'";
time psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "COPY tpc_h_test.lineitem FROM '/greenplum/****/lineitem.csv' WITH csv DELIMITER '|'";
4.3.2.4 查看每个表的个数
shell脚本实例
$ vi table-count.sh
#!bin/bash
psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "select count(*) part from tpc_h_test.part;";
psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "select count(*) region from tpc_h_test.region";
psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "select count(*) nation from tpc_h_test.nation";
psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "select count(*) supplier from tpc_h_test.supplier";
psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "select count(*) customer from tpc_h_test.customer";
psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "select count(*) partsupp from tpc_h_test.partsupp";
psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "select count(*) orders from tpc_h_test.orders";
psql -d stagging -h 192.****.11 -p 5432 -U gpadmin -c "select count(*) lineitem from tpc_h_test.lineitem";
查看个数
$ sh table-count.sh
part
----------
10000000
(1 row)
region
--------
5
(1 row)
nation
--------
25
(1 row)
supplier
----------
500000
(1 row)
customer
----------
7500000
(1 row)
partsupp
----------
40000000
(1 row)
orders
----------
75000000
(1 row)
lineitem
-----------
300005811
(1 row)
4.3.2.5 查看表的分布情况
4.3.2.5.1 customer 表的分布情况
4.3.2.5.2 part表的分布情况
4.3.2.5.3 region表的分布情况
4.3.2.5.4 nation表的分布情况
4.3.2.5.5 supplier表的分布情况
4.3.2.5.6 partsupp表的分布情况
4.3.2.5.7 orders表的分布情况
4.3.2.5.8 lineitem表的分布情况
查询SQL下载: tpc-h测试SQL.zip
用时17.877s
用时4.160s
用时9.581s
这个查询没有匹配到数据,用时0.032s
这个查询没有匹配到数据,用时0.049s
这个查询没有匹配到数据,用时0.026s
用时6.882s
用时6.261s
用时21.678s
这个查询没有匹配到数据,用时0.041s
这个查询没有匹配到数据,用时1.864s
这个查询没有匹配到数据,用时0.072s
用时4.080s
这个查询没有匹配到数据,用时0.041s
这个查询没有匹配到数据,用时0.481s
用时2.676s
用时21.901s
用时29.006s
用时3.385s
这个查询没有匹配到数据,用时1.739s
用时30.719s
用时4.104s
查询SQL下载: tpc-h测试SQL.zip
用时69.827s
用时9.911s
用时36.624s
这个查询没有匹配到数据,用时0.057s
这个查询没有匹配到数据,用时0.059s
这个查询没有匹配到数据,用时0.029s
用时22.081s
用时19.905s
用时58.924s
这个查询没有匹配到数据,用时0.040s
这个查询没有匹配到数据,用时3.393s
这个查询没有匹配到数据,用时0.072s
用时16.432s
这个查询没有匹配到数据,用时0.039s
这个查询没有匹配到数据,用时0.303s
用时10.648s
用时94.435s
用时118.068s
用时8.773s
这个查询没有匹配到数据,用时4.005s
用时85.615s
用时13.140s
在以上的图表中可以看出50G数据时,数据量最多的是lineitem表,达到300005811行的数据,最少的是region表,数据量5行
其中200G数据时,数据量最多的是lineitem表,达到12,0001,8434行的数据,最少的是region表,数据量5行。
表中的数据请查看 4.2 查看生成的测试数据
在以上的图表中可以看出,50G数据时耗时最多的是Q21,耗时30.719s, 0s代表查询没有匹配的数据
其中200G数据时耗时最多的是Q18,耗时118.068s , 0s代表查询没有匹配的数据。
执行计划运算类型 |
操作说明 |
是否有启动时间 |
---|---|---|
Seq Scan | 扫描表 | 无启动时间 |
Index Scan | 索引扫描 | 无启动时间 |
Bitmap Index Scan | 索引扫描 | 有启动时间 |
Bitmap Heap Scan | 索引扫描 | 有启动时间 |
Subquery Scan | 子查询 | 无启动时间 |
Tid Scan | ctid = …条件 | 无启动时间 |
Function Scan | 函数扫描 | 无启动时间 |
Nested Loop | 循环结合 | 无启动时间 |
Merge Join | 合并结合 | 有启动时间 |
Hash Join | 哈希结合 | 有启动时间 |
Sort | 排序,ORDER BY操作 | 有启动时间 |
Hash | 哈希运算 | 有启动时间 |
Result | 函数扫描,和具体的表无关 | 无启动时间 |
Unique | DISTINCT,UNION操作 | 有启动时间 |
Limit | LIMIT,OFFSET操作 | 有启动时间 |
Aggregate | count, sum,avg, stddev集约函数 | 有启动时间 |
Group | GROUP BY分组操作 | 有启动时间 |
Append | UNION操作 | 无启动时间 |
Materialize | 子查询 | 有启动时间 |
SetOp | INTERCECT,EXCEPT | 有启动时 |
-> Hash (cost=1840.19..1840.19 rows=413438 width=16)
-> HashAggregate (cost=0.00..1840.19 rows=413438 width=16)
Group By: orders.o_custkey
-> Redistribute Motion 48:48 (slice3; segments: 48) (cost=0.00..1786.12 rows=413438 width=16)
Hash Key: orders.o_custkey
-> Result (cost=0.00..1765.42 rows=413438 width=16)
-> HashAggregate (cost=0.00..1765.42 rows=413438 width=16)
Group By: orders.o_custkey
-> Table Scan on orders (cost=0.00..881.31 rows=6250000 width=8)
1.从下往上读
2.explain报告查询的操作,开启的消耗,查询总的消耗,访问的行数 访问的平均宽度
3.开启时间消耗是输出开始前的时间例如排序的时间
4.消耗包括磁盘检索页,cpu时间
5.注意,每一步的cost包括上一步的
6.重要的是,explain 不是真正的执行一次查询 只是得到查询执行的计划和估计的花费