POSTGRESQL TPC-H测试
postgresql & tpc-h(dbgen)
TPC-H是TPC提供的一个benchmark,用来模拟一个现实中的商业应用,可以生成一堆虚构的数据,且自带一些查询,可以导入到各种数据库中来模拟现实需求,检查性能。
具体是怎样的数据见:http://www.tpc.org/tpch/spec/tpch4.16.0.pdf
1、做实验之前的配置
a、首先在mac下安装postgresql
终端命令
brew install postgresql -v
若出现Error: Cannot write to /usr/local/Cellar
可以输入以下命令进行解决
sudo chown -R $USER /usr/local
b、接着下载dbgen
在这个网站上下载
https://github.com/electrum/tpch-dbgen
解压后在根目录找到makefile.suite 进行修改
把103~112行左右改成这个样子
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= SQLSERVER
MACHINE = LINUX
WORKLOAD = TPCH
#
c、 接着在终端访问至该文件的根目录
输入make 就会发现该文件有dbgen文件生成
d、在终端输入命令
./dbgen -s 1 -f
就会发现在文件夹下有tbl文件生成,其数据如下
2、创建数据库:
这里启动和关闭数据库的命令在mac的终端下运行,linux没试过
启动PostgreSQl
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
关闭 PostgreSQL:
pg_ctl -D /usr/local/var/postgres stop -s -m fast
创建一个 PostgreSQL 用户
createuser username -P
Enter password for new role:
Enter it again:
上面的 username 是用户名,回车输入 2 次用户密码后即用户创建完成。更多用户创建信息可以 “createuser –help” 查看。
创建数据库
createdb dbname -O username -E UTF8 -e
上面创建了一个名为 dbname 的数据库,并指定 username 通ky"http://www.it165.net/qq/" target="_blank" class="keylink">qq4xMr9vt2/4rXE07XT0NXfo6hvd25lcqOpo6zK/b7dv+K1xLHgwuujqGVuY29kaW5no6nKxyBVVEY4o6yyzsr9ICZsZHF1bzstZSZyZHF1bzsgysfWuLDRyv2+3b/i1rTQ0LLZ1/e1xMP8we7P1Mq+s/bAtKGjPC9wPgo8cD64/Lbgyv2+3b/itLS9qNDFz6K/ydLUICZsZHF1bztjcmVhdGVkYiAmbmRhc2g7aGVscCZyZHF1bzsgsum/tKGjPC9wPgo8cD7BrL3Tyv2+3b/iPGJyIC8+CnBzcWwgLVUgdXNlcm5hbWUgLWQgZGJuYW1lIC1oIDEyNy4wLjAuMTwvcD4KPHA+M6GitLS9qLHto6wgdHBjLWix7bXExKPKvbTmtKLU2mRzcy5kbGy1xM7EvP7Jz6Os08POxLG+seC8rcb3tPK/qjxiciAvPgo8aW1nIGFsdD0="这里写图片描述" src="http://www.it165.net/uploadfile/files/2016/0406/201604062001172155.png" title="" />
在创建的数据库中一一创建,创建出8张表
输入dt 查看所有表是否创建成功
4、载入数据
注意!!!
需要先载入数据再进行添加主键和外键,否则添加主键、外键之后,再插入数据,无法插入,因为无法获得外键数据。
tbl生成的文件无法自动转化成postgresql需穴ky"http://www.it165.net/qq/" target="_blank" class="keylink">qq1xMr9vt2jrNDo0qrQ3rjEo6y9q8O/0rvQ0NfuuvPSu7j2JnJzcXVvOw=="’去掉才能转化
原因英文资料上是这样写的
PostgreSQL requires that the delimiter should not appear at the end of every line
Postgresql数据库不允许最后有分隔符出现
#include
#include
#include
using namespace std;
int main(int argc, const char * argv[]) {
string s;
ifstream in;
in.open('lineitem.tbl');
ofstream out;
out.open('lineitem1.tbl');
if (in.is_open()) {
while (getline(in, s)) {
int len = s.length();
int i = len-1;
//将最后一个竖号去掉才能满足postgresql的数据读取
if (s[i] == '|')
s[i] = '
';
out << s;
}
}
out.close();
return 0;
}
如此修改文件名执行8次生成tbl文件
接着从数据库中载入数据
5、添加外键、主键
载入数据后,就可以添加外键、主键
对每张表添加外键、主键,修改tpch-dbgen文件夹中的dss.ri(用文本编辑器打开),将dss.ri所有添加外键和主键的信息都按照以下修改,并注释掉图上的connect to tpcd
如果是在linux下要先输入命令
sudo su 用户名
开启数据库
在mac下启动数据库
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
接着在终端执行命令 psql -f 文件路径 数据库名称
就完成了
查看表中的信息是否修改