TPC-H(三):PostgreSQL单节点测试环境搭建

本文详细介绍了如何在CentOS 6.5上搭建PostgreSQL 9.5单节点环境,并使用TPC-H 2.17.3工具生成测试数据,包括安装、配置、数据导入及执行22个查询SQL的全过程。
摘要由CSDN通过智能技术生成

环境

  • CentOS 6.5
  • PostgreSQL 9.5
  • TPC-H 2.17.3

1. 安装单节点PostgreSQL

1.1 安装repo PRM

yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-6-x86_64/pgdg-centos95-9.5-3.noarch.rpm

1.2重建yum元数据

yum clean all
yum makecache

1.3 安装PG

yum install postgresql95
yum install postgresql95-server

1.4 初始化PG

service postgresql-9.5 initdb

1.5 设置自PG启动

chkconfig postgresql-9.5 on

1.6 启动PG

service postgresql-9.5 start

1.8 备注

官网安装地址:点击查看
PG路径:/var/lib/pgsql/9.5/data

2. 配置PG

2.1 设置远程访问

vi /var/lib/pgsql/9.5/data/postgresql.conf  
# listen_addresses项值修改为:listen_addresses="*"  

vi /var/lib/pgsql/9.5/data/pg_hba.conf  
# TYPE  DATABASE  USER  CIDR-ADDRESS  METHOD 选项下添加:  
host  all  all 0.0.0.0/0 md5

2.2 修改PG数据库密码

切换pg用户
#su postgres
进入数据库
$psql
设置密码
postgres-# \password postgres
新建数据库
postgres-# create database tpch ;

2.2 重启PG

service postgresql-9.5 restart

3. 生成TPC-H测试数据

3.1 导入tpc-h-tool2.17.3到/root目录下

3.2 修改print.c适配PG

  • TPC-H本身不支持PG,默认生成的数据的每一行结尾有“|”,PG的官方文档说明导入的数据不可以以“|”结尾,需要修改print.c文件
    vi /root/tpc-h/dbgen/print.c
    注释掉以下两句话,在145行和147行
#ifdef EOL_HANDLING
    if (sep)
#endif /* EOL_HANDLING */

修改为:

//#ifdef EOL_HANDLING
    if (sep)
//#endif /* EOL_HANDLING */

3.3 配置makefile

  • 创建makefile复本
    cp makefile.suite makefile
  • 修改makefile为:
CC      = gcc
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
#                                  SQLSERVER, SYBASE, ORACLE
# Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS, 
#                                  SGI, SUN, U2200, VMS, LINUX, WIN32 
# Current values for WORKLOAD are:  TPCH
DATABASE= POSTGRESQL
MACHINE = LINUX
WORKLOAD = TPCH
  • 添加以下PG参数到tpcd.h
#ifdef POSTGRESQL
#define GEN_QUERY_PLAN  "EXPLAIN"      
#define START_TRAN      "BEGIN TRANSACTION"
#define END_TRAN        "COMMIT;"
#define SET_OUTPUT      ""
#define SET_ROWCOUNT    "LIMIT %d\n"
#define SET_DBASE       ""
#endif

3.4 编译

make

3.5 生成数据

本操作会在目录下生成8个数据表格的相应数据文件:

customer.tbl  lineitem.tbl  nation.tbl  orders.tbl  partsupp.tbl  part.tbl  region.tbl  supplier.tbl

命令:

./dbgen -s 1 -f 
  • -s 后接生成的数据大小,单位为G
  • -f 覆盖原有的数据

4. 导入数据到PG

4.1 在PG新建相应的表格

# su postgres
bash-4.1$ psql
postgres=# \c tpch
您现在已经连接到数据库 "tpch",用户 "postgres".
testdb=# 

执行以下语句:
- 建表的sql语句在dss.ddl文件中

CREATE TABLE NATION  ( N_NATIONKEY  INTEGER NOT NULL,
                            N_NAME       CHAR(25) NOT NULL,
                            N_REGIONKEY  INTEGER NOT NULL,
                            N_COMMENT    VARCHAR(152));

CREATE TABLE REGION  ( R_REGIONKEY  INTEGER NOT NULL,
                            R_NAME       CHAR(25) NOT NULL,
                            R_COMMENT    VARCHAR(152));

CREATE TABLE PART  ( P_PARTKEY     INTEGER NOT NULL,
                          P_NAME        VARCHAR(55) NOT NULL,
                          P_MFGR        CHAR(25) NOT NULL,
                          P_BRAND       CHAR(10) NOT NULL,
                          P_TYPE        VARCHAR(25) NOT NULL,
                          P_SIZE        INTEGER NOT NULL,
                          P_CONTAINER   CHAR(10) NOT NULL,
                          P_RETAILPRICE DECIMAL(15,2) NOT NULL,
                          P_COMMENT     VARCHAR(23) NOT NULL );

CREATE TABLE SUPPLIER ( S_SUPPKEY     INTEGER NOT NULL,
                             S_NAME        CHAR(25) NOT NULL,
                             S_ADDRESS     VARCHAR(40) NOT NULL,
                             S_NATIONKEY   INTEGER NOT NULL,
                             S_PHONE       CHAR(15) NOT NULL,
                             S_ACCTBAL     DECIMAL(15,2) NOT NULL,
                             S_COMMENT     VARCHAR(101) NOT NULL);

CREATE TABLE PARTSUPP ( PS_PARTKEY     INTEGER NOT NULL,
                             PS_SUPPKEY     INTEGER NOT NULL,
                             PS_AVAILQTY    INTEGER NOT NULL,
                             PS_SUPPLYCOST  DECIMAL(15,2)  NOT NULL,
                             PS_COMMENT     VARCHAR(199) NOT NULL );

CREATE TABLE CUSTOMER ( C_CUSTKEY     INTEGER NOT NULL,
                             C_NAME        VARCHAR(25) NOT NULL,
                             C_ADDRESS     VARCHAR(40) NOT NULL,
                             C_NATIONKEY   INTEGER NOT NULL,
                             C_PHONE       CHAR(15) NOT NULL,
                             C_ACCTBAL     DECIMAL(15,2)   NOT NULL,
                             C_MKTSEGMENT  CHAR(10) NOT NULL,
                             C_COMMENT     VARCHAR(117) NOT NULL);

CREATE TABLE ORDERS  ( O_ORDERKEY       INTEGER NOT NULL,
                           O_CUSTKEY        
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值