环境
- 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