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

周小丽 · April 17, 2019 · 2822 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