9
MySQL tpch 测测测测测测测测 tpch 是 TPC(Transaction Processing Performance Council)是 OLAP 是是 是是是是是是是是是是是是是 DSS 是是是 是是是 )。一 ad-hoc 是 是 是 ,、 I/O 是 是 ,。 是是 http://www.tpc.org/tpch 是是是是 http://www.tpc.org/tpch/spec/tpch_2_14_3.tgz http://www.tpc.org/tpch/spec/tpch_2_14_3.zip 1 是是是 ,,: cp makefile.suite makefile 是是 makefile 是是是是 CCDATABASEMACHINEWORKLOAD 是是是 ################ ## CHANGE NAME OF ANSI COMPILER HERE ################ CC = gcc # Current values for DATABASE are: INFORMIX, DB2, ORACLE, # SQLSERVER, SYBASE, TDAT (Teradata) # Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS, # SGI, SUN, U2200, VMS, LINUX, WIN32 # Current values for WORKLOAD are: TPCH DATABASE= MYSQL MACHINE = LINUX WORKLOAD = TPCH

Mysql tpch测试工具简要手册 - 20121226

Embed Size (px)

DESCRIPTION

mysql tpch测试工具介绍

Citation preview

Page 1: Mysql tpch测试工具简要手册 - 20121226

MySQL tpch测试工具简要手册

tpch 是 TPC(Transaction Processing Performance Council)组织提供的工具包。用于进行 OLAP 测试,以评估商业分析中决策支持系统(DSS)的性能。它包含了一整套面向商业的 ad-hoc 查询和并发数据修改,强调测试的是数据库、平台和 I/O 性能,关注查询能力。官网:http://www.tpc.org/tpch

下载地址:http://www.tpc.org/tpch/spec/tpch_2_14_3.tgz 或 http://www.tpc.org/tpch/spec/tpch_2_14_3.zip

1、编译安装下载源码包,解压缩,然后:cp makefile.suite makefile

修改 makefile 文件中的 CC、DATABASE、MACHINE、WORKLOAD 等定义:################

## CHANGE NAME OF ANSI COMPILER HERE

################

CC = gcc

# Current values for DATABASE are: INFORMIX, DB2, ORACLE,

# SQLSERVER, SYBASE, TDAT (Teradata)

# Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS,

# SGI, SUN, U2200, VMS, LINUX, WIN32

# Current values for WORKLOAD are: TPCH

DATABASE= MYSQL

MACHINE = LINUX

WORKLOAD = TPCH

Page 2: Mysql tpch测试工具简要手册 - 20121226

修改 tpcd.h 文件,增加几行宏定义:#ifdef MYSQL

#define GEN_QUERY_PLAN ""

#define START_TRAN "START TRANSACTION"

#define END_TRAN "COMMIT"

#define SET_OUTPUT ""

#define SET_ROWCOUNT "limit %d;\n"

#define SET_DBASE "use %s;\n"

#endif

然后执行 make 编译,编译完毕后会生成两个可执行文件:

dbgen:数据生成工具。在使用 InfiniDB 官方测试脚本进行测试时,需要用该工具生成 tpch 相关表数据。 qgen:SQL 生成工具

生成初始化测试数据:[root@imysql tpch]# time ./dbgen -s 50

TPC-H Population Generator (Version 2.9.0)

Copyright Transaction Processing Performance Council 1994 - 2008

real 192m43.897s

user 37m45.398s

sys 19m4.132s

[root@imysql tpch]# ls -lh *tbl

-rw-r--r-- 1 root root 1.2G Sep 21 15:23 customer.tbl

Page 3: Mysql tpch测试工具简要手册 - 20121226

-rw-r--r-- 1 root root 1.4G Sep 21 15:23 lineitem.tbl

-rw-r--r-- 1 root root 2.2K Sep 21 15:23 nation.tbl

-rw-r--r-- 1 root root 317M Sep 21 15:23 orders.tbl

-rw-r--r-- 1 root root 504K Sep 21 15:23 partsupp.tbl

-rw-r--r-- 1 root root 464K Sep 21 15:23 part.tbl

-rw-r--r-- 1 root root 389 Sep 21 15:23 region.tbl

-rw-r--r-- 1 root root 69M Sep 21 15:23 supplier.tbl

dbgen 参数 -s 的作用是指定生成测试数据的仓库数,建议基准值设定在 100 以上,在我的测试环境中,一般都设定为 1000。由于源码包中自带的 tpch 初始化库表脚本并不能完全适用 MySQL,需要修改部分代码。先生成测试 SQL 脚本:[root@imysql tpch]# ./qgen | sed -e 's/\r//' > queries/tpch_queries.sql

而后用 vim 打开 tpch_queries.sql 脚本,进行下面几次全局替换::%s/;\nlimit/ limit/g

:%s/limit -1/limit 1/g

搜索所有类似下面的语句,去掉后面的 (3):l_shipdate <= date '1998-12-01' - interval '106' day (3)

=>

l_shipdate <= date '1998-12-01' - interval '106' day

再修改第 369 行附近:count(o_orderkey)

=>

count(o_orderkey) as c_count

Page 4: Mysql tpch测试工具简要手册 - 20121226

修改第 376 行左右) as c_orders (c_custkey, c_count)

=>

) as c_orders

修改第 431 行附近:drop view revenue0 limit 1;

=>

drop view revenue0;

最后把大的查询 SQL 脚本拆分成 23 个独立的 SQL 查询脚本,分别从 tpch_01.sql ~ tpch_23.sql。

2、初始化库表tpch 提供的数据库表初始化脚本有些小问题,需要进行修改:dss.ddl – DSS 库初始化 DDL 脚本dss.ri – DSS 数据表创建索引、外键脚本dss.ddl 脚本需要增加几行:drop database tpch;

create database tpch;

use tpch;

dss.ri 脚本需要修改几个地方:修改第 4 行左右:CONNECT TO TPCD;

=>

Use tpch;

Page 5: Mysql tpch测试工具简要手册 - 20121226

修改第 6~13 行,所有的 SQL 注释符 “--” 后面再加一个空格:-- ALTER TABLE TPCD.REGION DROP PRIMARY KEY;

-- ALTER TABLE TPCD.NATION DROP PRIMARY KEY;

-- ALTER TABLE TPCD.PART DROP PRIMARY KEY;

-- ALTER TABLE TPCD.SUPPLIER DROP PRIMARY KEY;

-- ALTER TABLE TPCD.PARTSUPP DROP PRIMARY KEY;

-- ALTER TABLE TPCD.ORDERS DROP PRIMARY KEY;

-- ALTER TABLE TPCD.LINEITEM DROP PRIMARY KEY;

-- ALTER TABLE TPCD.CUSTOMER DROP PRIMARY KEY;

修改第 25 行:ADD FOREIGN KEY NATION_FK1 (N_REGIONKEY) references TPCD.REGION;

=>

ADD FOREIGN KEY NATION_FK1 (N_REGIONKEY) references TPCD.REGION(R_REGIONKEY);

修改第 40 行:ADD FOREIGN KEY SUPPLIER_FK1 (S_NATIONKEY) references TPCD.NATION;

=>

ADD FOREIGN KEY SUPPLIER_FK1 (S_NATIONKEY) references TPCD.NATION(N_NATIONKEY);

修改第 55 行:ADD FOREIGN KEY CUSTOMER_FK1 (C_NATIONKEY) references TPCD.NATION;

=>

ADD FOREIGN KEY CUSTOMER_FK1 (C_NATIONKEY) references TPCD.NATION(N_NATIONKEY);

Page 6: Mysql tpch测试工具简要手册 - 20121226

修改第 73 行:ADD FOREIGN KEY PARTSUPP_FK1 (PS_SUPPKEY) references TPCD.SUPPLIER;

=>

ADD FOREIGN KEY PARTSUPP_FK1 (PS_SUPPKEY) references TPCD.SUPPLIER(S_SUPPKEY);

修改第 78 行:ADD FOREIGN KEY PARTSUPP_FK2 (PS_PARTKEY) references TPCD.PART;

=>

ADD FOREIGN KEY PARTSUPP_FK2 (PS_PARTKEY) references TPCD.PART(P_PARTKEY);

修改第 84 行:ADD FOREIGN KEY ORDERS_FK1 (O_CUSTKEY) references TPCD.CUSTOMER;

=>

ADD FOREIGN KEY ORDERS_FK1 (O_CUSTKEY) references TPCD.CUSTOMER(C_CUSTKEY);

修改第 90 行:ADD FOREIGN KEY LINEITEM_FK1 (L_ORDERKEY) references TPCD.ORDERS;

=>

ADD FOREIGN KEY LINEITEM_FK1 (L_ORDERKEY) references TPCD.ORDERS(O_ORDERKEY);

修改第 96 行:TPCD.PARTSUPP;

=>

TPCD.PARTSUPP(PS_PARTKEY,PS_SUPPKEY);

另外,由于 tpch 生成的表名是大写的,需要修改下表名成小写的,因此再增加几行:

Page 7: Mysql tpch测试工具简要手册 - 20121226

use tpch;

alter table CUSTOMER rename to customer ;

alter table LINEITEM rename to lineitem ;

alter table NATIONrename to nation ;

alter table ORDERS rename to orders ;

alter table PART rename to part ;

alter table PARTSUPP rename to partsupp ;

alter table REGION rename to region ;

alter table SUPPLIER rename to supplier ;

3、导入数据测试数据生成了,测试库表也初始化完了,接下来就可以开始导入数据了。需要注意下,如果开启了 binlog,在导入前最好先关闭 binlog,否则会提示超出 max_binlog_cache_size 的错误提示,如果不能关闭 binlog,则需要把导入文件切分成多个小文件再导入。myqsl -e "LOAD DATA INFILE 'path/dbgen/customer.tbl' INTO TABLE CUSTOMER FIELDS TERMINATED BY '|';"

myqsl -e "LOAD DATA INFILE 'path/dbgen/orders.tbl' INTO TABLE ORDERS FIELDS TERMINATED BY '|';"

myqsl -e "LOAD DATA INFILE 'path/dbgen/lineitem.tbl' INTO TABLE LINEITEM FIELDS TERMINATED BY '|';"

myqsl -e "LOAD DATA INFILE 'path/dbgen/nation.tbl' INTO TABLE NATION FIELDS TERMINATED BY '|';"

myqsl -e "LOAD DATA INFILE 'path/dbgen/partsupp.tbl' INTO TABLE PARTSUPP FIELDS TERMINATED BY '|';"

myqsl -e "LOAD DATA INFILE 'path/dbgen/part.tbl' INTO TABLE PART FIELDS TERMINATED BY '|';"

myqsl -e "LOAD DATA INFILE 'path/dbgen/region.tbl' INTO TABLE REGION FIELDS TERMINATED BY '|';"

myqsl -e "LOAD DATA INFILE 'path/dbgen/supplier.tbl' INTO TABLE SUPPLIER FIELDS TERMINATED BY '|';"

4、执行 tpch 测试接下来就可以进行 tpch 测试了,逐个执行 23 个查询 SQL 脚本即可,每次执行前都要重启下 MySQL 实例,确保每次的内存缓冲区都是干净的。

Page 8: Mysql tpch测试工具简要手册 - 20121226

简单循环测试脚本如下:#!/bin/sh

##

## 执行 tpch OLAP 测试##

## writed by yejr(http://imysql.com), 2012/12/14

##

PATH=$PATH:/usr/local/bin

export PATH

. ~/.bash_profile > /dev/null 2>&1

exec 3>&1 4>&2 1>> tpch-benchmark-olap-`date +'%Y%m%d%H%M%S'`.log 2>&1

I=1

II=3

while [ $I -le $II ]

do

N=1

T=23

while [ $N -lt $T ]

do

if [ $N -lt 10 ] ; then

NN='0'$N

else

NN=$N

Page 9: Mysql tpch测试工具简要手册 - 20121226

fi

echo "query $NN starting"

/etc/init.d/mysql restart

time mysql -f tpch < ./queries/tpch_${NN}.sql

echo "query $NN ended!"

N=`expr $N + 1`

done

I=`expr $I + 1`

Done

附件:tpch 初始化、自动化测试脚本压缩包 。

附录:1、测试数据导入前文件大小:[root@ld_231_nj_180 tpch]# du -sch *tbl

2.3G customer.tbl

75G lineitem.tbl

4.0K nation.tbl

17G orders.tbl

12G partsupp.tbl

2.3G part.tbl

4.0K region.tbl

137M supplier.tbl

107G total

2、测试数据表大小:-rw-rw---- 1 mysql mysql 107G Nov 1 10:09 /home/mysql/tpch/lineitem.ibd