欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL-tpch 測試工具簡要手冊

 更新時間:2016年05月29日 00:16:55   投稿:mdxy-dxy  
tpch是TPC(Transaction Processing Performance Council)組織提供的工具包。用于進行OLAP測試,以評估商業(yè)分析中決策支持系統(tǒng)(DSS)的性能。它包含了一整套面向商業(yè)的ad-hoc查詢和并發(fā)數(shù)據(jù)修改,強調(diào)測試的是數(shù)據(jù)庫、平臺和I/O性能,關(guān)注查詢能力

tpch是TPC(Transaction Processing Performance Council)組織提供的工具包。用于進行OLAP測試,以評估商業(yè)分析中決策支持系統(tǒng)(DSS)的性能。它包含了一整套面向商業(yè)的ad-hoc查詢和并發(fā)數(shù)據(jù)修改,強調(diào)測試的是數(shù)據(jù)庫、平臺和I/O性能,關(guān)注查詢能力。
官網(wǎng):http://www.tpc.org/tpch
下載地址:http://www.tpc.org/tpch/spec/tpch_2_14_3.tgzhttp://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

修改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
然后執(zhí)行make編譯,編譯完畢后會生成兩個可執(zhí)行文件:
dbgen:數(shù)據(jù)生成工具。在使用InfiniDB官方測試腳本進行測試時,需要用該工具生成tpch相關(guān)表數(shù)據(jù)。
qgen:SQL生成工具
生成初始化測試數(shù)據(jù):
[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
-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參數(shù) -s 的作用是指定生成測試數(shù)據(jù)的倉庫數(shù),建議基準值設(shè)定在100以上,在我的測試環(huán)境中,一般都設(shè)定為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

修改第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提供的數(shù)據(jù)庫表初始化腳本有些小問題,需要進行修改:
dss.ddl – DSS庫初始化DDL腳本
dss.ri  – DSS數(shù)據(jù)表創(chuàng)建索引、外鍵腳本
dss.ddl腳本需要增加幾行:
drop database tpch;
create database tpch;
use tpch;

dss.ri腳本需要修改幾個地方:
修改第4行左右:
CONNECT TO TPCD;
=>
Use tpch;

修改第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);

修改第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生成的表名是大寫的,需要修改下表名成小寫的,因此再增加幾行:
use tpch;

alter table CUSTOMER rename to customer ;
alter table LINEITEM rename to lineitem ;
alter table NATION rename 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、導(dǎo)入數(shù)據(jù)
測試數(shù)據(jù)生成了,測試庫表也初始化完了,接下來就可以開始導(dǎo)入數(shù)據(jù)了。
需要注意下,如果開啟了binlog,在導(dǎo)入前最好先關(guān)閉binlog,否則會提示超出max_binlog_cache_size的錯誤提示,如果不能關(guān)閉binlog,則需要把導(dǎo)入文件切分成多個小文件再導(dǎo)入。
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、執(zhí)行tpch測試
接下來就可以進行tpch測試了,逐個執(zhí)行23個查詢SQL腳本即可,每次執(zhí)行前都要重啟下MySQL實例,確保每次的內(nèi)存緩沖區(qū)都是干凈的。
簡單循環(huán)測試腳本如下:

#!/bin/sh
##
## 執(zhí)行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
 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初始化、自動化測試腳本壓縮包與word手冊。

相關(guān)文章

  • MySQL配置了雙主,是如何避免出現(xiàn)數(shù)據(jù)回環(huán)沖突的

    MySQL配置了雙主,是如何避免出現(xiàn)數(shù)據(jù)回環(huán)沖突的

    這篇文章主要介紹了MySQL配置了雙主,是如何避免出現(xiàn)數(shù)據(jù)回環(huán)沖突的,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-01-01
  • 學(xué)習(xí)mysql?如何行轉(zhuǎn)列與列傳行

    學(xué)習(xí)mysql?如何行轉(zhuǎn)列與列傳行

    這篇文章主要介紹了mysql行轉(zhuǎn)列與列傳行的使用方法,幫助大家更好的理解和學(xué)習(xí)MySQL的使用,語句不難,但有一定的知識參考價值,需要的朋友可以參考一下,希望給你的學(xué)習(xí)帶來幫助
    2022-02-02
  • MySQL是怎么保證主備一致的

    MySQL是怎么保證主備一致的

    大家知道 binlog 可以用來歸檔,也可以用來做主備同步,但它的內(nèi)容是什么樣的呢?為什么備庫執(zhí)行了 binlog 就可以跟主庫保持一致了呢,本文就詳細的介紹一下
    2021-09-09
  • MySQL外鍵約束的刪除和更新總結(jié)

    MySQL外鍵約束的刪除和更新總結(jié)

    這篇文章主要給大家總結(jié)MySQL外鍵約束的刪除和更新,文中通過代碼示例和圖文介紹的非常詳細,對大家了解MySQL外鍵約束有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • mysql?中的備份恢復(fù),分區(qū)分表,主從復(fù)制,讀寫分離

    mysql?中的備份恢復(fù),分區(qū)分表,主從復(fù)制,讀寫分離

    這篇文章主要介紹了mysql?中的備份恢復(fù),分區(qū)分表,主從復(fù)制,讀寫分離,文章圍繞主題展開詳細的內(nèi)容戒殺,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 什么是blob,mysql blob大小配置介紹

    什么是blob,mysql blob大小配置介紹

    BLOB (binary large object),二進制大對象,是一個可以存儲二進制文件的容器。在計算機中,BLOB常常是數(shù)據(jù)庫中用來存儲二進制文件的字段類型
    2012-02-02
  • mysql 新增、刪除用戶和權(quán)限分配

    mysql 新增、刪除用戶和權(quán)限分配

    這篇文章主要為大家演示下如果通過命令行實現(xiàn)mysql的新建用戶、刪除用戶和權(quán)限分配,需要的朋友可以參考下
    2013-10-10
  • Centos5.5中安裝Mysql5.5過程分享

    Centos5.5中安裝Mysql5.5過程分享

    這篇文章主要介紹了Centos5.5中安裝Mysql5.5過程分享,本文使用編譯方法安裝MySQL,并給出了一些可能遇到的錯誤和解決方法,需要的朋友可以參考下
    2015-01-01
  • SELECT… FOR UPDATE 排他鎖的實現(xiàn)

    SELECT… FOR UPDATE 排他鎖的實現(xiàn)

    本文主要介紹了SELECT… FOR UPDATE 排他鎖的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 使用SQL查詢所有數(shù)據(jù)庫名和表名問題

    使用SQL查詢所有數(shù)據(jù)庫名和表名問題

    這篇文章主要介紹了使用SQL查詢所有數(shù)據(jù)庫名和表名問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論