1、 TPC- H 是针对数据库决策支持能力的测试基准,主要是评价服务器数据库的分析处理能力。测试数据库复杂查询的响应时间,以每小时执行的查询数作为度量指标。
2、 TPC-H 基准模型中定义了一个数据库模型,容量可以在 1GB~10000GB 的 8 个级别中选择。
根据比例因子 Scale Factor(SF)的大小确定数据集的大小,当 SF=1 时,表的大小为 1GB;SF 可取值有(1,10,30,100,300,1000,3000,10000)。
./dbgen -vf -s 1
3、 数据库中共有 8 张表,支持多用户并发执行复杂的动态查询,同时有并发执行表修改操作
4、 TPC- H 测试围绕 22 个 SELECT 语句展开,还有 2 条带有 insert 和 delete 程序段的更新流语句
5、 TPC-H 测试分解为 3 个子测试:数据装载测试、Power 测试和 Throughput 测试
[gpadmin@mdw local]$ cd tpch_2_17_0/
[gpadmin@mdw tpch_2_17_0]$ cd dbgen/
[gpadmin@mdw dbgen]$ cp makefile.suite makefile
[gpadmin@mdw dbgen]$ vim makefile
需要在 makefile 文件中设置几个参数:
由于 TPCH 数据库参数没有 PostgreSQL 数据库选项,需要自己增加 PG 数据的脚本,在 dbgen 目录下更改 tpcd.h 文件
[gpadmin@mdw dbgen]$ make
1、生成 sf = 10G 的数据
[gpadmin@mdw dbgen]$ ./dbgen -s 10 -f
2、将测试数据转换为 postgres 识别的格式,删除末尾的分隔符 |
[gpadmin@mdw dbgen]$ for i in `ls *.tbl`; do sed 's/|$//' $i > ${i/tbl/csv}; done
1、切换到 postgres 账户下,创建 tpch 数据库
[root@localhost dbgen]# su - postgres
-bash-4.2$ psql
postgres = #CREATE DATABASE tpch ;
2、为 tpch 数据库创建表,相关表的创建语句可以从 dss.ddl 中复制到 navicat 中执行
1、将数据导入 PostgreSQL 数据库中
su - postgres //进入PostgreSQL数据库
psql //执行sql语句
\c tpch //切换到tpch数据库
Copy region FROM '/2.17.3/dbgen/tbl/region.csv' WITH DELIMITER AS '|';
Copy nation FROM '/2.17.3/dbgen/tbl/nation.csv' WITH DELIMITER AS '|';
Copy part FROM '/2.17.3/dbgen/tbl/part.csv' WITH DELIMITER AS '|';
Copy supplier FROM '/2.17.3/dbgen/tbl/supplier.csv' WITH DELIMITER AS '|';
Copy customer FROM '/2.17.3/dbgen/tbl/customer.csv' WITH DELIMITER AS '|';
Copy lineitem FROM '/2.17.3/dbgen/tbl/lineitem.csv' WITH DELIMITER AS '|';
Copy partsupp FROM '/2.17.3/dbgen/tbl/partsupp.csv' WITH DELIMITER AS '|';
Copy orders FROM '/2.17.3/dbgen/tbl/orders.csv' WITH DELIMITER AS '|';
2、数据表的约束条件存放在 dss.ri 文件中,复制到 navicat 中执行。
1、生成 22 条 sql 语句,复制 qgen 和 dists.dss 到 queries ,cd 到 queries 目录下执行
./qgen -d 1 >d1.sql //-d表示默认参数,1表示按照模板一生成sql语句
2、分别将这 22 条 sql 语句,复制到 navicat 中执行
注意:qgen 生成的 sql 语句,不能直接执行,需要将末尾的~删除
由于 postgres 版本兼容性的问题,需要对原生的 sql 语句进行改造
l_shipdate <= date '1998-12-01' - interval '[DELTA]' day (3)
改成:
l_shipdate <= date '1998-12-01' - interval '78' day
p_size = [SIZE] //指定大小,在区间 [1, 50] 内随机选择;如 p_size = -1
但 postgres 不能识别该语句,需改成:
p_size = ceil(random()*(50)+1) 在区间 [1, 50] 内随机取整
and r_name = ':3' 指定地区,在 TPC-H 标准指定的范围内随机选择
但 postgres 不能识别该语句,获取某字段中的随机值,需改成:
r_name like in (SELECT r_name FROM part ORDER BY random() LIMIT 1)
3、可通过 jmeter 对数据库进行压测(22 条 sql 语句)