PG系列数据库TPCH测试文档

该文档适用于使用postgresql语法的数据库

一、机器环境

此次测试只为走通该测试的测试流程,准备的服务器是本地虚拟化的机器,故性能不具备参考价值

主机名 ip 内存 磁盘 带宽
ym01 192.168.110.221 8G 40G 共享千兆
ym02 192.168.110.222 8G 40G 共享千兆
ym03 192.168.110.223 8G 40G 共享千兆

二、TPCH环境准备

1、下载TPCH

这里由于网络问题,我将https://github.com/tpch-dbgen.git 同步至gitee上后进行拉取

git clone https://gitee.com/mklzl/tpch-dbgen.git

2、编译TPCH

  1. 修改makefile

    ################
    ## CHANGE NAME OF ANSI COMPILER HERE
    ################
    CC      = gcc
    # Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
    #                                  SQLSERVER, SYBASE, ORACLE, VECTORWISE
    # Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS,
    #                                  SGI, SUN, U2200, VMS, LINUX, WIN32
    # Current values for WORKLOAD are:  TPCH
    DATABASE=ORACLE
    MACHINE = LINUX
    WORKLOAD = TPCH
    
  2. 编译

    yum install -y gcc
    make
    

3、准备数据

  1. 生成数据

    ./dbgen -s 10 -f
    

    准备大约10G数据

  2. 修改数据

    for i in `ls *.tbl`; do sed 's/|$//' $i > ${i/tbl/csv}; done
    
  3. 生成软链接(方便执行数据导入脚本)

    ln -s /home/pgtpch10/ /tmp/dss-data
    

    这里会将生成的 .tbl 的文件所在的目录软链接至 /tmp/dss-data

4、 查询语句生成

使用该tpch的查询语句的生成,是无法适用于pg系列的查询的,需要进行改写,也可以使用下面的模板生成查询语句

  1. 模板链接:
https://github.com/digoal/pg_tpch/tree/master/dss/templates

需要将这个链接中templates中所有的文件下载下来,放在一个固定目录,例如就放在tpch的目录下

  1. 编写脚本
#!/bin/bash
for ((i=1;i<=22;i++)); do./qgen -v -c -s $1 ${i} > $2/tpch-q${i}.sql
done
  1. export模板变量
 export DSS_QUERY=./templates
  1. 执行脚本

该脚本传入两个参数,参数1为scale,和生成数据时传入的数量保持一致,参数二为生成的查询语句对应的目录,该目录需要提前创建

执行该脚本后,会在对应目录下生成查询语句,如下:

[root@ym01 tpch-dbgen]# sh create_query.sh 10 ./querysql
[root@ym01 tpch-dbgen]# cd querysql/
[root@ym01 querysql]# ll
总用量 88
-rw-r--r-- 1 root root  647 11月 10 10:39 10.sql
-rw-r--r-- 1 root root  631 11月 10 10:39 11.sql
-rw-r--r-- 1 root root  720 11月 10 10:39 12.sql
-rw-r--r-- 1 root root  470 11月 10 10:39 13.sql
-rw-r--r-- 1 root root  442 11月 10 10:39 14.sql
-rw-r--r-- 1 root root  641 11月 10 10:39 15.sql
-rw-r--r-- 1 root root  609 11月 10 10:39 16.sql
-rw-r--r-- 1 root root  476 11月 10 10:39 17.sql
-rw-r--r-- 1 root root  582 11月 10 10:39 18.sql
-rw-r--r-- 1 root root 1090 11月 10 10:39 19.sql
-rw-r--r-- 1 root root  664 11月 10 10:39 1.sql
-rw-r--r-- 1 root root  865 11月 10 10:39 20.sql
-rw-r--r-- 1 root root  805 11月 10 10:39 21.sql
-rw-r--r-- 1 root root  797 11月 10 10:39 22.sql
-rw-r--r-- 1 root root  818 11月 10 10:39 2.sql
-rw-r--r-- 1 root root  519 11月 10 10:39 3.sql
-rw-r--r-- 1 root root  476 11月 10 10:39 4.sql
-rw-r--r-- 1 root root  607 11月 10 10:39 5.sql
-rw-r--r-- 1 root root  365 11月 10 10:39 6.sql
-rw-r--r-- 1 root root  926 11月 10 10:39 7.sql
-rw-r--r-- 1 root root  900 11月 10 10:39 8.sql
-rw-r--r-- 1 root root  741 11月 10 10:39 9.sql

三、建表

  • part

    CREATE TABLE PART (P_PARTKEY               SERIAL8,P_NAME                  VARCHAR(55),P_MFGR                  CHAR(25),P_BRAND                 CHAR(10),P_TYPE                  VARCHAR(25),P_SIZE                  INTEGER,P_CONTAINER             CHAR(10),P_RETAILPRICE   DECIMAL,P_COMMENT               VARCHAR(23)
    ) with (APPENDONLY=true,BLOCKSIZE=2097152,ORIENTATION=COLUMN,CHECKSUM=true,OIDS=false) DISTRIBUTED BY (p_partkey);
    
  • region

    CREATE TABLE REGION (R_REGIONKEY     SERIAL8,R_NAME          CHAR(25),R_COMMENT       VARCHAR(152)
    )  with (APPENDONLY=true,BLOCKSIZE=2097152,ORIENTATION=COLUMN,CHECKSUM=true,OIDS=false) DISTRIBUTED BY (r_regionkey);
    
  • partsupp

    CREATE TABLE PARTSUPP (PS_PARTKEY              BIGINT NOT NULL, -- references P_PARTKEYPS_SUPPKEY              BIGINT NOT NULL, -- references S_SUPPKEYPS_AVAILQTY             INTEGER,PS_SUPPLYCOST   DECIMAL,PS_COMMENT              VARCHAR(199))  with (APPENDONLY=true,BLOCKSIZE=2097152,ORIENTATION=COLUMN,CHECKSUM=true,OIDS=false) DISTRIBUTED BY (ps_partkey,ps_suppkey);
    
  • nation

    CREATE TABLE NATION (N_NATIONKEY             SERIAL8,N_NAME                  CHAR(25),N_REGIONKEY             BIGINT NOT NULL,  -- references R_REGIONKEYN_COMMENT               VARCHAR(152)
    )  with (APPENDONLY=true,BLOCKSIZE=2097152,ORIENTATION=COLUMN,CHECKSUM=true,OIDS=false) DISTRIBUTED BY (n_nationkey);
    
  • supplier

    CREATE TABLE SUPPLIER (S_SUPPKEY               SERIAL8,S_NAME                  CHAR(25),S_ADDRESS               VARCHAR(40),S_NATIONKEY             BIGINT NOT NULL, -- references N_NATIONKEYS_PHONE                 CHAR(15),S_ACCTBAL               DECIMAL,S_COMMENT               VARCHAR(101)
    )  with (APPENDONLY=true,BLOCKSIZE=2097152,ORIENTATION=COLUMN,CHECKSUM=true,OIDS=false) DISTRIBUTED BY (s_suppkey);
    
  • customer

    CREATE TABLE CUSTOMER (C_CUSTKEY               SERIAL8,C_NAME                  VARCHAR(25),C_ADDRESS               VARCHAR(40),C_NATIONKEY             BIGINT NOT NULL, -- references N_NATIONKEYC_PHONE                 CHAR(15),C_ACCTBAL               DECIMAL,C_MKTSEGMENT    CHAR(10),C_COMMENT               VARCHAR(117)
    )  with (APPENDONLY=true,BLOCKSIZE=2097152,ORIENTATION=COLUMN,CHECKSUM=true,OIDS=false) DISTRIBUTED BY (c_custkey);
    
  • lineitem

    CREATE TABLE LINEITEM (L_ORDERKEY              BIGINT NOT NULL, -- references O_ORDERKEYL_PARTKEY               BIGINT NOT NULL, -- references P_PARTKEY (compound fk to PARTSUPP)L_SUPPKEY               BIGINT NOT NULL, -- references S_SUPPKEY (compound fk to PARTSUPP)L_LINENUMBER    INTEGER,L_QUANTITY              DECIMAL,L_EXTENDEDPRICE DECIMAL,L_DISCOUNT              DECIMAL,L_TAX                   DECIMAL,L_RETURNFLAG    CHAR(1),L_LINESTATUS    CHAR(1),L_SHIPDATE              DATE,L_COMMITDATE    DATE,L_RECEIPTDATE   DATE,L_SHIPINSTRUCT  CHAR(25),L_SHIPMODE              CHAR(10),L_COMMENT               VARCHAR(44)
    )  with (APPENDONLY=true,BLOCKSIZE=2097152,ORIENTATION=COLUMN,CHECKSUM=true,OIDS=false) DISTRIBUTED BY (l_orderkey, l_linenumber);
    
  • orders

    CREATE TABLE ORDERS (O_ORDERKEY              SERIAL8,O_CUSTKEY               BIGINT NOT NULL, -- references C_CUSTKEYO_ORDERSTATUS   CHAR(1),O_TOTALPRICE    DECIMAL,O_ORDERDATE             DATE,O_ORDERPRIORITY CHAR(15),O_CLERK                 CHAR(15),O_SHIPPRIORITY  INTEGER,O_COMMENT               VARCHAR(79)
    )  with (APPENDONLY=true,BLOCKSIZE=2097152,ORIENTATION=COLUMN,CHECKSUM=true,OIDS=false) DISTRIBUTED BY (o_orderkey);
    

四、导入数据

可以通过登录psql的命令行,执行copy命令,逐表进行数据导入,如下:

登录数据库:

psql -d tpch -h 192.168.110.221 -p 5432 -U mxadmin

打开计时:

tpch=# \timing on
Timing is on.

执行导入:

COPY lineitem FROM '/tmp/dss-data/lineitem.csv' WITH csv DELIMITER '|';
COPY orders FROM '/tmp/dss-data/orders.csv' WITH csv DELIMITER '|';
COPY partsupp FROM '/tmp/dss-data/partsupp.csv' WITH csv DELIMITER '|';
COPY customer FROM '/tmp/dss-data/customer.csv' WITH csv DELIMITER '|';
COPY supplier FROM '/tmp/dss-data/supplier.csv' WITH csv DELIMITER '|';
COPY nation FROM '/tmp/dss-data/nation.csv' WITH csv DELIMITER '|';
COPY region FROM '/tmp/dss-data/region.csv' WITH csv DELIMITER '|';
COPY part FROM '/tmp/dss-data/part.csv' WITH csv DELIMITER '|';

也可以通过编写下面的脚本进行导入

将上述语句放入一个名为copy.sql的文件中,执行下面的语句:

psql -f copy.sql -U user_name -d db_name -h host -p port

五、查询

1、收集统计信息

在SQL中执行:

analyze nation;
analyze region;
analyze lineitem;
analyze orders;
analyze customer;
analyze part;
analyze partsupp;
analyze supplier;

2、执行查询

可以手动执行上面生成的查询语句,也可以使用下面的脚本进行执行

执行脚本如下:

total_cost=0for i in {1..2}
doecho "begin run Q${i}, /home/tpch/tpch-dbgen/querysql/tpch-q$i.sql , `date`"begin_time=`date +%s.%N`psql -d tpch -h 192.168.110.221 -p 5432 -U mxadmin -f /home/tpch/tpch-dbgen/querysql/tpch-q${i}.sql > ./log/log_q${i}.outrc=$?end_time=`date +%s.%N`cost=`echo "$end_time-$begin_time"|bc`total_cost=`echo "$total_cost+$cost"|bc`if [ $rc -ne 0 ] ; thenprintf "run Q%s fail, cost: %.2f, totalCost: %.2f, `date`\n" $i $cost $total_costelseprintf "run Q%s succ, cost: %.2f, totalCost: %.2f, `date`\n" $i $cost $total_costfi
done

请自行修改脚本中对应数据连接和执行查询SQL路径的参数

执行后会有以下输出:

begin run Q1, /home/tpch/tpch-dbgen/querysql/tpch-q1.sql , 2022年 11月 10日 星期四 10:44:28 CST
run Q1 succ, cost: 16.02, totalCost: 16.02, 2022年 11月 10日 星期四 10:44:44 CST
begin run Q2, /home/tpch/tpch-dbgen/querysql/tpch-q2.sql , 2022年 11月 10日 星期四 10:44:44 CST
run Q2 succ, cost: 0.23, totalCost: 16.25, 2022年 11月 10日 星期四 10:44:44 CST
......

PG系列数据库TPCH测试文档相关推荐

  1. java计算机毕业设计手机测试管理系统源代码+数据库+系统+lw文档

    java计算机毕业设计手机测试管理系统源代码+数据库+系统+lw文档 java计算机毕业设计手机测试管理系统源代码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

  2. java计算机毕业设计海南自贸港知识学习与测试源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计海南自贸港知识学习与测试源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计海南自贸港知识学习与测试源码+mysql数据库+系统+lw文档+部署 本源码技术栈: ...

  3. 孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档

    孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库 ...

  4. java计算机毕业设计Web企业差旅在线管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计Web企业差旅在线管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计Web企业差旅在线管理系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈 ...

  5. java计算机毕业设计-数字相册管理系统-源码+数据库+系统+lw文档+mybatis+运行部署

    java计算机毕业设计-数字相册管理系统-源码+数据库+系统+lw文档+mybatis+运行部署 java计算机毕业设计-数字相册管理系统-源码+数据库+系统+lw文档+mybatis+运行部署 本源 ...

  6. java计算机毕业设计吉他库存管理源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计吉他库存管理源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计吉他库存管理源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开 ...

  7. java计算机毕业设计体育用品购物系统源码+数据库+系统+lw文档+mybatis+运行部署

    java计算机毕业设计体育用品购物系统源码+数据库+系统+lw文档+mybatis+运行部署 java计算机毕业设计体育用品购物系统源码+数据库+系统+lw文档+mybatis+运行部署 本源码技术栈 ...

  8. java计算机毕业设计微留学学生管理系统源码+数据库+系统+lw文档+mybatis+运行部署

    java计算机毕业设计微留学学生管理系统源码+数据库+系统+lw文档+mybatis+运行部署 java计算机毕业设计微留学学生管理系统源码+数据库+系统+lw文档+mybatis+运行部署 本源码技 ...

  9. 导出 MySQL 数据库表结构设计文档

    第一种 :利用sql语句查询 需要说明的是该方法应该适用很多工具,博主用的是navicat SELECT TABLE_NAME 表名,COLUMN_NAME 列名, COLUMN_TYPE 数据类型, ...

最新文章

  1. Linux的fork实现原理,【Linux】Fork炸弹详解
  2. python入门要多久-初学者如何快速上手python入门要多久
  3. 数据结构与算法—栈详解
  4. 【测试】物料帐单/多级差异流转测试
  5. 【Redis】Redis入门与安装步
  6. django mysql api_Django的API操作mysql中常用的语句
  7. 误删除了mysql库的user表解决办法
  8. Visual Studio 2010 C++ 用户属性设置
  9. java 生成静态html的一段代码
  10. 互联网平台黑产解密(上)
  11. apk注册机加密_apk软件添加注册机方法 安卓apk添加授权教程
  12. 使用ActionForm的validate()进行验证
  13. 汉字符号(汉字特殊符号)
  14. html如何根据颜色排序,Excel技巧:按颜色排序或筛选
  15. linux备份mysql部分表数据,mysqldump导出表的部分数据库
  16. WikiExtractor.py(维基百科抽取器)
  17. Linux命令详解之 cp
  18. 数字化改革“1612”详解
  19. 在eclipes 中配置python
  20. 同余及其性质(Congruence)

热门文章

  1. 背单词软件-功能介绍
  2. Chainlink Price Feeds现已上线Moonbeam,实现波卡构建者访问领先预言机提供商Chainlink的Price Feeds
  3. hp服务器安装ghost系统安装,惠普电脑/HP笔记本无法安装GHOST系统的解决方法
  4. 【Visual C++】游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论
  5. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之MemoryT(三)
  6. HDUOJ 1078 FatMouse and Cheese
  7. 伽马分布,指数分布,泊松分布的关系
  8. 五大地形等高线特征_五种基本地形特征
  9. c语言与UGNX编程,第3章 编程基础 (UGNX二次开发实用教程)
  10. 探索职场真我---“DISC测评”