写在前面:
个人对TPCH benchma的理解。我接到这个任务的时候,描述是这样的,“××呀,用benchMarke生成TPC-H然后测试一下"。我第一反应就是benchMark是什么,TPCH是什么。现在把这个弄完一遍后来说一下我的理解。

首先什么是TPC-H?

包括:八张定义好的表(也就是八个create语句)、表中的一条条的数据(比如”张三,1997-12-25,‘江苏’,98)、22条SQL语句。

TPC-H能干什么?

用来测试数据库管理系统的性能。浅显的举例子,比如现在有个项目要用数据库,备选的有MySQL、postgreSQL、张三公司开发的zsDB。指标就是要一个查询的快的数据库。这时候就可以用TPC-H的创建表的语句在三个数据库中创建同样的表,然后都导入TPC-H生成的1TB的记录数据,然后运行同样的TPC-H的22条SQL语句,在三个变量都相同的情况下,看最后哪个数据库跑完22条语句用的平均时间最短。根据结果选出一个来用。

我们用TPC-H需要干什么?怎么用?

不同的数据库的SQL语句语法上有差别,所以我们需要告诉TPC-H我们需要测试什么数据库,让他生成对应数据库的表创建语句,约束语句,SQL语句等。而且根据不同的情况需要生成不同大小的数据,比如1G,100G,1TB等等,就干这么个事

什么是benchMark

说实话,我现在也没理解。感觉是benchMark是一个集合。比如测试数据库除了 TPC-H 还有TPC-DS等等,还有测试cpu性能的什么的,所有的这些标准的大家都认可的测试集,称之为benchMark。(纯属个人理解,如果错误,欢迎批评指正,万分感谢)

参考文献在末尾

1.下载TPC-H的文件夹

TPC-H压缩包官网地址


注意:下载时需要填写邮箱,然后会发一个下载地址到邮箱里,邮箱地址只能下载一次,下一次下载需要再填一次邮箱,到新的地址下载。
如果是linux 可以用wget命令等下载,也可以在Windows下下载之后传输到Linux上,百度一下如何将文件传输到服务器上。或者用WinS C P可以很方便的传输文件

2.解压压缩包


(这个压缩包的名字很长,我自己改了下名字)
解压后如下

3.编译

①将makefile.suite 的复制到 makefile

②修改makefile文件



键盘输入 i 键入插入模式

完成后 按 Esc进入命令模式 输入 :wq 保存并退出

③修改dbgen目录下的tpcd.h文件

注意:如果DATABASE这里填的是红框里已有的数据库就不用进行这一步了,我用的是postgreSQL这里没有,所以需要进行这一步。向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

④编译 不管需不需要步骤③都需要编译 make

编译完成后会在当前目录下生成dbgen

4.产生数据 (数据就是数据库中一行一行的记录)

./dbgen -s 1 -f

-s 1 表示产生1GB的数据 -f 表示复制原来的数据
可以灵活修改这些参数 比如 ./dbgen -s 100生成100G的数据

将数据移到一个单独的目录

pwd Linux查看当前文件绝对路径的命令
向数据库中导入数据时要注意,需要把 .tbl文件中每一行后面的 | 这个竖线符号去掉,不然会报错。至于怎么去掉,我是自己写了python程序

import os
#去除文件夹data1g中的文件中每一列最后一行的 ‘|’
#讲去除后的内容写入文件夹 2data1g对应的文件中for root in os.listdir('data1g'):f = open('data1g' + '//' + root, 'r')w = open('2data1g' + '//' + '1' + root, 'w')for i in f:length = len(i) - 2if ('|' == i[length]):j = i[:length] + "\n"w.write(j)f.close()w.close()

处理完的数据在2data1g这个文件夹里面。
我是用WinSCP 先将服务器里的data1g文件拖拽到windows本地处理,处理完之后将2data1g的文件夹拖拽到服务器上原来data1g文件夹所在的位置
如果有权限问题,比如数据库在某个用户下,然后winSCP拖拽文件时是另一个用户登录的比如root用户,又可能在下面用命令运行数据库的时候产生错误,也可能在对文件进行操作时出现无法操作的问题。可以用chmod命令修改文件所属的用户(出现对应问题时上网查看命令的具体使用)

5.生成查询语句

到queries文件夹下
TPC-H_Tools_v3.0.0/dbgen/queries

queries文件夹原来长这样

需要将qgen 和 dists.dss复制到queries目录下

注意下方命令 cp 源文件路径 目的文件路径
所以下面第一条命令前一个qgen 和后一个 qgen之间有一个空格哦
dists.dss也是这样

生成查询语句,注意这里有22个所有只能生成22个
会写批处理的可以用批处理,我不会,所以我就一行行写写了22行

./qgen -d 1 > d1.sql
./qgen -d 2 > d2.sql
./qgen -d 3 > d3.sql
./qgen -d 4 > d4.sql
./qgen -d 5 > d5.sql
./qgen -d 6 > d6.sql
./qgen -d 7 > d7.sql
./qgen -d 8 > d8.sql
./qgen -d 9 > d9.sql
./qgen -d 10 > d10.sql
./qgen -d 11 > d11.sql
./qgen -d 12 > d12.sql
./qgen -d 13 > d13.sql
./qgen -d 14 > d14.sql
./qgen -d 15 > d15.sql
./qgen -d 16 > d16.sql
./qgen -d 17 > d17.sql
./qgen -d 18 > d18.sql
./qgen -d 19 > d19.sql
./qgen -d 20 > d20.sql
./qgen -d 21 > d21.sql
./qgen -d 22 > d22.sql

6.数据库操作

此处根据数据库不同命令也有差别
我用的是poatgres-XL

①连接数据库

②建立数据库

create databse tpch; //创建数据库tpch
drop database tpch;  //删除数据库tpch
\l //(L的小写) 显示当前都有哪些数据库
\c tpch //进入数据库

③创建表

创建表的sql语句在TPC-H_Tools_v3.0.0/dbgen下的 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        INTEGER NOT NULL,O_ORDERSTATUS    CHAR(1) NOT NULL,O_TOTALPRICE     DECIMAL(15,2) NOT NULL,O_ORDERDATE      DATE NOT NULL,O_ORDERPRIORITY  CHAR(15) NOT NULL,  O_CLERK          CHAR(15) NOT NULL, O_SHIPPRIORITY   INTEGER NOT NULL,O_COMMENT        VARCHAR(79) NOT NULL);CREATE TABLE LINEITEM ( L_ORDERKEY    INTEGER NOT NULL,L_PARTKEY     INTEGER NOT NULL,L_SUPPKEY     INTEGER NOT NULL,L_LINENUMBER  INTEGER NOT NULL,L_QUANTITY    DECIMAL(15,2) NOT NULL,L_EXTENDEDPRICE  DECIMAL(15,2) NOT NULL,L_DISCOUNT    DECIMAL(15,2) NOT NULL,L_TAX         DECIMAL(15,2) NOT NULL,L_RETURNFLAG  CHAR(1) NOT NULL,L_LINESTATUS  CHAR(1) NOT NULL,L_SHIPDATE    DATE NOT NULL,L_COMMITDATE  DATE NOT NULL,L_RECEIPTDATE DATE NOT NULL,L_SHIPINSTRUCT CHAR(25) NOT NULL,L_SHIPMODE     CHAR(10) NOT NULL,L_COMMENT      VARCHAR(44) NOT NULL);

④添加约束

约束(主键、外键)在dss.ri文件中
因为不知名原因外键添加不成功,所以我就直接删除了文件中外键的添加

⑤导入数据 注意路径

\copy customer from '/tpch/TPC-H_Tools_v3.0.0/2data1g/1customer.tbl' with delimiter as '|' NULL ' ';
\copy lineitem from '/tpch/TPC-H_Tools_v3.0.0/2data1g/1lineitem.tbl' with delimiter as '|' NULL ' ';
\copy nation from '/tpch/TPC-H_Tools_v3.0.0/2data1g/1nation.tbl' with delimiter as '|' NULL ' ';
\copy orders from '/tpch/TPC-H_Tools_v3.0.0/2data1g/1orders.tbl' with delimiter as '|' NULL ' ';
\copy part from '/tpch/TPC-H_Tools_v3.0.0/2data1g/1part.tbl' with delimiter as '|' NULL ' ';
\copy partsupp from '/tpch/TPC-H_Tools_v3.0.0/2data1g/1partsupp.tbl' with delimiter as '|' NULL ' ';
\copy region from '/tpch/TPC-H_Tools_v3.0.0/2data1g/1region.tbl' with delimiter as '|' NULL ' ';
\copy supplier from '/tpch/TPC-H_Tools_v3.0.0/2data1g/1supplier.tbl' with delimiter as '|' NULL ' ';

⑥运行sql语句

参考文献
https://blog.csdn.net/iteapoy/article/details/104214119
https://blog.csdn.net/m0_37852301/article/details/120886897
https://www.cnblogs.com/littlesuccess/p/3840594.html
https://www.cnblogs.com/joyeecheung/p/3599698.html
https://www.cnblogs.com/yongzhewudi/p/5371396.html

希望大家科研顺利、工作顺利、不要出现莫名其妙的ERROR

benchmark TPC-H postgreSQL相关推荐

  1. PostgreSQL学习手册(客户端命令Ⅱ)

    为什么80%的码农都做不了架构师?>>>    七.pg_dump: pg_dump是一个用于备份PostgreSQL数据库的工具.它甚至可以在数据库正在并发使用时进行完整一致的备份 ...

  2. 【C/C++17】_ooci.h,_ooci.cpp,_mysql.h,_mysql.cpp,_postgresql.h,_postgresql.cpp

    文章目录 1._ooci.h 2._ooci.cpp 3._mysql.h 4._mysql.cpp 5._postgresql.h 6._postgresql.cpp 1._ooci.h //con ...

  3. TPC(Transaction Processing Performance Council)-事务处理性能委员会

    什么是TPC TPC全称Transaction Processing Performance Council,即事务处理性能委员会. 根据wikipedia的解释:TPC是一个非盈利组织,成立于198 ...

  4. 一周一论文(翻译)——[Acta 1996] The Log-Structured Merge-Tree (LSM-Tree)

    Abstract 高性能事务系统通常会通过向一个历史表中插入记录以追踪各项活动行为:与此同时事务系统也会因系统恢复的需要而生成日志记录.这两种类型的生成信息都可以从高效的索引方式中获益.众所周知的一个 ...

  5. 【C/C++13】天气APP:数据挖掘/HTTP协议/非结构化数据存储(filetoblob.cpp),数据管理/监控告警(hsmtable.cpp,tbspaceinfo.cpp)

    文章目录 1. 数据挖掘:/etc/rc.local,sudo su 2.HTTP协议:优先wget 3.非结构化数据存储:blob,pzhrain24file 4.数据管理子系统:数据字典表 5.监 ...

  6. harbor重置mysql密码_Harbor密码重置 密码修改 admin密码重置

    Harbor密码重置 harbor现在是使用postgresql 数据库了.不再支持mysql,网上有N多重置Mysql密码的,可以略过了. 我密码错了默认的Harbor12345 修改为: RedH ...

  7. harbor搭建-主从复制

    harbor搭建 文章目录 harbor搭建 1.Harbor概述 2.Harbor架构 3.Harbor部署 3.1 hostname配置 3.2 dns配置 3.3 yum源配置 3.4 dock ...

  8. CentOS7安装harbor仓库+修改默认用户+仓库登录报错

    Docker安装和简单的使用_hrj的博客-CSDN博客 下面 搭建harbor仓库 1.安装docker-compose Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的 ...

  9. 容器技术-部署企业级Docker镜像仓库Harbor

    在网上找了个 k8s 教程,觉得挺全的,分享给大家. 链接: https://pan.baidu.com/s/19ECniUoF243Vn9sQF6cXpA 密码: v98f –来自百度网盘超级会员V ...

  10. 为云而生,云原生数据库TDSQL-C技术突破与演进

    以"数实融合,绽放新机"为主题,聚焦产业趋势与技术前沿,打造产业互联网顶级盛会的2021腾讯数字生态大会日前在武汉举办,腾讯云数据库技术负责人程彬进行了<云原生时代的数据库技 ...

最新文章

  1. python 四边形分割
  2. ExtJs 日期相加,Grid表格列可编辑
  3. java synchronized关键字
  4. sql server:alter database name
  5. 英语语法---不定式短语详解
  6. XHR(XMLHttpRequest)与Linux下的CGI交互
  7. ODPS主备集群双向数据复制导致主备中心网络打爆问题
  8. 计算机辅助普通话水平测试评分办法,计算机辅助普通话水平测试评分试行办法...
  9. CentOS 5.2 LVM 新增加一块硬盘的方法
  10. 《Inside C#》笔记(一) .NET平台
  11. 【空号检测】批量手机号码空号检测查询软件,号码如何去除查询空号
  12. Red5流媒体服务器的搭建与使用
  13. 大一计算机信息技术重点知识,大学计算机信息技术教程必考点知识归纳
  14. js 分析——百度模拟登录(一)
  15. Centos7 逻辑卷 物理卷 卷组 实践
  16. 华硕x580nv拆机_看懂一篇拆机贴 拆遍天下机 华硕A45VM拆机清灰换硅脂 怒降25度!...
  17. 6个免费PPT模板网站,简直不要太好用
  18. 短视频的特点和分类——今抖云创
  19. 赵丽5500 第二节课
  20. 《新程序员》杂志|李鹏辉谈开源云原生消息流系统

热门文章

  1. 史上最详细的新浪广告系统技术架构优化历程
  2. Java培训班靠谱吗?
  3. ExoPlayer网速估计方法
  4. 3章等价类划分法-城市号码
  5. NXP 公司的 RFID 卡
  6. 使用太乐地图下载器下载cesium适用瓦片
  7. 【Python爬虫网站数据实战】Python爬虫 统计淘宝商品数据+数据可视化
  8. 史上最全2019届秋招备战攻略
  9. SpringBoot整合druid数据源,quartz定式框架
  10. Flutter如何强制竖屏