m6米乐安卓版下载-米乐app官网下载
暂无图片
4

opengauss/mogdb的tpch测试 -m6米乐安卓版下载

原创 阎书利 2023-11-17
351

tpc-h是一个决策支持基准(decision support benchmark),它由一套面向业务的特别查询和并发数据修改组成。查询和填充数据库的数据具有广泛的行业相关性。这个基准测试演示了检查大量数据、执行高度复杂的查询并回答关键业务问题的决策支持系统。tpc-h报告的性能指标称为tpc-h每小时复合查询性能指标(qphh@size),反映了系统处理查询能力的多个方面。这些方面包括执行查询时所选择的数据库大小,由单个流提交查询时的查询处理能力,以及由多个并发用户提交查询时的查询吞吐量。

tpc-h 测试标准模拟了一个零部件在线销售的系统,共定义了8个表:

表名称 说明
region 区域表
nation 国家表
supplier 供应商表
part 零部件表
partsupp 零部件供应表
customer 客户表
orders 订单表
lineitem 订单明细表

对应测试有22条sql,涉及不同类型的业务。

查询语句 说明 主要涉及业务
q1 价格统计报告查询 带有分组、排序、聚集操作并存的单表查询操作。这个查询会导致表上的数据有95%到97%行被读取到。
q2 最小代价供货商查询 带有排序、聚集操作、子查询并存的多表查询操作。查询语句没有从语法上限制返回多少条元组,但是tpc-h标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。
q3 运送优先级查询 带有分组、排序、聚集操作并存的三表查询操作。查询语句没有从语法上限制返回多少条元组,但是tpc-h标准规定,查询结果只返回前10行(通常依赖于应用程序实现)。
q4 订单优先级查询 带有分组、排序、聚集操作、子查询并存的单表查询操作。子查询是相关子查询。
q5 本地供应商收入量查询 带有分组、排序、聚集操作、子查询并存的多表连接查询操作。
q6 预测收入变化查询 带有聚集操作的单表查询操作。查询语句使用了between-and操作符,有的数据库可以对between-and进行优化。
q7 批量出货查询 带有分组、排序、聚集、子查询操作并存的多表查询操作。子查询的父层查询不存在其他查询对象,是格式相对简单的子查询。
q8 国家市场份额查询 带有分组、排序、聚集、子查询操作并存的查询操作。子查询的父层查询不存在其他查询对象,是格式相对简单的子查询,但子查询自身是多表连接的查询。
q9 产品类型利润估量查询 带有分组、排序、聚集、子查询操作并存的查询操作。子查询的父层查询不存在其他查询对象,是格式相对简单的子查询,但子查询自身是多表连接的查询。子查询中使用了like操作符,有的查询优化器不支持对like操作符进行优化。
q10 货运存在问题的查询 带有分组、排序、聚集操作并存的多表连接查询操作。查询语句没有从语法上限制返回多少条元组,但是tpc-h标准规定,查询结果只返回前10行(通常依赖于应用程序实现)。
q11 库存价值查询 带有分组、排序、聚集、子查询操作并存的多表连接查询操作。子查询位于分组操作的having条件中。
q12 货运模式和订单优先级查询 带有分组、排序、聚集操作并存的两表连接查询操作。
q13 消费者订单数量查询 带有分组、排序、聚集、子查询、左外连接操作并存的查询操作。
q14 促销效果查询 带有分组、排序、聚集、子查询、左外连接操作并存的查询操作。
q15 头等供货商查询 带有分排序、聚集、聚集子查询操作并存的普通表与视图的连接操作。
q16 零件/供货商关系查询 带有分组、排序、聚集、去重、not in子查询操作并存的两表连接操作。
q17 小订单收入查询 带有聚集、聚集子查询操作并存的两表连接操作。
q18 大订单顾客查询 带有分组、排序、聚集、in子查询操作并存的三表连接操作。查询语句没有从语法上限制返回多少条元组,但是tpc-h标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。
q19 折扣收入查询 带有分组、排序、聚集、in子查询操作并存的三表连接操作。
q20 供货商竞争力查询 带有排序、聚集、in子查询、普通子查询操作并存的两表连接操作。
q21 供应商留单等待查询 带有分组、排序、聚集、exists子查询、not exists子查询操作并存的四表连接操作。查询语句没有从语法上限制返回多少条元组,但是tpc-h标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。
q22 全球销售机会查询 带有分组、排序、聚集、exists子查询、not exists子查询操作并存的四表连接操作。

如下是opengaus/mogdb测试tpch的流程。可供参考:

上传tpch的工具包

链接: https://pan.baidu.com/s/1reqknbimwtke5ecbqpxjzg 提取码: qjbc

mogdb=# create database tpch_db;
create database
mogdb=# create user tpch with password 'abcd@1234' sysadmin;
notice:  the encrypted password contains md5 ciphertext, which is not secure.
create role
mogdb=# alter database tpch_db owner to tpch ;
alter database
tpch_db=# alter schema public owner to tpch ;
alter schema
gsql -p 23000 -d tpch_db -u tpch < createtab_og.sql

pasted graphic 2.png

image.png

解压tpch的包,进入dbgen的目录

1.修改makefile文件

[om3@lmt0003 tpc-h_tools_v3.0.0]$ pwd
/home/om3/tpch-opengauss-testtools/tpch-opengauss-testtools/tpc-h_tools_v3.0.0
[om3@lmt0003 tpc-h_tools_v3.0.0]$ cd dbgen/
[om3@lmt0003 dbgen]$ ls
answers     build.c          dists.dss  dsstypes.h      permute.h      queries    rnd.h         tests     tpch.vcproj
bcd2.c      check_answers    driver.c   history         porting.notes  readme     rng64.c       text.c    update_release.sh
bcd2.h      column_split.sh  dss.ddl    load_stub.c     print.c        reference  rng64.h       tpcd.h    variants
bm_utils.c  config.h         dss.h      makefile.suite  qgen.c         release.h  shared.h      tpch.dsw  varsub.c
bugs        dbgen.dsp        dss.ri     permute.c       qgen.vcproj    rnd.c      speed_seed.c  tpch.sln
[om3@lmt0003 dbgen]$ cp makefile.suite makefile
[om3@lmt0003 dbgen]$ vi makefile

pasted graphic 4.png

修改其中103到112行

image.png

2.修改tpcd.h

[om3@lmt0003 dbgen]$ vi tpcd.h 

在文件末尾加上

#ifdef postgresql
#define gen_query_plan  "explain plan"
#define start_tran      "set transaction"
#define end_tran        "commit;"
#define set_output      ""
#define set_rowcount    "limit %d\n"
#define set_dbase      ""
#endif

修改完编译配置文件,可以编译出程序
3.编译dbgen

[om3@lmt0003 dbgen]$ make -f makefile

image.png
image.png

参数说明:
-v:详细信息
-f:覆盖之前的文件
-s:生成数据大小,单位gb
-c参数:表示把生成的数据分为几份
-s参数:切分数据用,表示第几个文件,例如:“-s 1”表示第1个文件,“-s 2”表示第2个文件

例:
1.生成1g数据

./dbgen vf -s 1

image.png

image.png

生成8个tbl文件,对应8张表的数据。

也可以使用多个线程产生数据,加块速率。例:8线程生成500g数据

#!/bin/sh
./dbgen -vf -s 500 -s 1 -c 8 &
./dbgen -vf -s 500 -s 2 -c 8 &
./dbgen -vf -s 500 -s 3 -c 8 &
./dbgen -vf -s 500 -s 4 -c 8 &
./dbgen -vf -s 500 -s 5 -c 8 &
./dbgen -vf -s 500 -s 6 -c 8 &
./dbgen -vf -s 500 -s 7 -c 8 &
./dbgen -vf -s 500 -s 8 -c 8 &

2.转换数据(把tbl文件转换为csv文件)

for i in `ls *.tbl`;do sed 's/|$//' $i > ${i/tbl/csv};echo $i;done;

image.png

创建脚本,导入数据

[om3@lmt0003 dbgen]$ vi copyin_tpch_db.sh 

下面需要修改的部分为dir和opts部分,dir为上述csv的路径。opts是gsql后需要加的参数,包含端口,数据库名等,sch是指定schema。

dir=/home/om3/tpch-opengauss-testtools/tpch-opengauss-testtools/tpc-h_tools_v3.0.0/dbgen
opts='-p 23000 -d tpch_db'
sch=public
gsql $opts -c "copy $sch.region from '$dir/region.csv' with (format csv,delimiter '|')"
gsql $opts -c "copy $sch.nation from '$dir/nation.csv' with (format csv,delimiter '|')"
gsql $opts -c "copy $sch.part from '$dir/part.csv' with (format csv,delimiter '|')"
gsql $opts -c "copy $sch.supplier from '$dir/supplier.csv' with (format csv,delimiter '|')"
gsql $opts -c "copy $sch.customer from '$dir/customer.csv' with (format csv,delimiter '|')"
gsql $opts -c "copy $sch.partsupp from '$dir/partsupp.csv' with (format csv,delimiter '|')"
gsql $opts -c "copy $sch.orders from '$dir/orders.csv' with (format csv,delimiter '|')"
gsql $opts -c "copy $sch.lineitem from '$dir/lineitem.csv' with (format csv,delimiter '|')"

image.png

create or replace function numtoyminterval(float8, text) returns interval as $$ select ($1||' '||$2)::interval;  
$$ language sql strict immutable;
create or replace function numtodsinterval(float8, text) returns interval as $$ select ($1||' '||$2)::interval;  
$$ language sql strict immutable;

image.png

image.png

如下是遍历执行全部22种sql的脚本

#!/bin/bash
opts='-p 23000 -d tpch_db -u tpch -w 'abcd@1234''
for i in `seq 1 22`
do
echo $i"'s  result"
gsql ${opts} -f ${i}.sql
done

image.png

可以将8张表的导入耗时以及22种sql的执行耗时记录下来,并做相应对比(测表导入耗时可以copy前开启\timing)。

最后修改时间:2023-11-17 16:39:13
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【米乐app官网下载的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

网站地图