数据测试 TPC-H 对 postgres 数据库基础能力测试

周小丽 · April 17, 2019 · 105 hits

一、什么是TPC-H测试

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 测试

二、TPC-H安装配置

[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

三、TPC-H数据生成

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中执行。

六、sql执行

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语句)

七、22条sql语句分析

https://yq.aliyun.com/articles/149715?t=t1

No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up