[笔记] 大家一起来测试,benchmark起来(MySQL下的TPC-C,TPC-H,TPC-W)
來自:http://www.itpub.net/thread-1330311-1-1.html
前段時間在MySQL下做了些類基準測試,帖出小結。
其中遇到許多小問題,不知道有遺漏步驟沒,也還有些問題沒解決,希望大家討論討論,一起測試起來吧,嘿嘿~
環境:
ubuntu9.10
Server version: 5.1.37-1ubuntu5.4 (Ubuntu)
一、TPC-C(參考:http://samurai-mysql.blogspot.com/2009/03/settingup-dbt-2.html? ? ? ? Settingup DBT-2,需要掛代理,附1)
1)安裝MySQL及相關組件
??略
2)下載DBT-2
??http://osdldbt.sourceforge.net/
3)安裝所需要的perl包(可參考:http://blog.sina.com.cn/s/blog_48c95a190100h7yq.html)
??shell> sudo cpan Statistics:: Descriptive
??shell> sudo cpan Test::Parser
??shell> sudo cpan Test::Reporter
??(參考資料:http://bbs.chinaunix.net/archiver/?tid-881542.html,
? ?? ?? ?? ??http://blog.csdn.net/yhb72/archive/2005/11/27/537667.aspx
? ?? ?? ?? ??http://bbs3.chinaunix.net/thread-1076095-2-1.html)
4)編譯DBT-2
??進入相應的DBT-2目錄
??cd /home/liova/download/dbt2-0.40/
??執行:
??shell> sudo apt-get install build-essentials
??shell> ./configure --with-mysql=/usr/local/mysql [options] && make
??shell> sudo make install
5)生成所需要的數據庫記錄
??shell> datagen -w 10 -d /var/tmp/dbt2 --mysql
??-w 指定了數據倉庫的個數
??-d 指定了生成的數據所在的目錄
7)ubuntu下需要生成一個臨時連接,因為mysqld.sock不在tmp目錄下(以后每次重啟系統都需要先執行這句,如果嫌麻煩,可以修改MySQL的配置文件,把sock文件生成到tmp目錄下)
??ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
6)把生成的記錄載入MySQL,在DBT-2目錄下執行
??shell> sudo scripts/mysql/build_db.sh -w 3 -d dbt2 -f /var/tmp/dbt2 -s /tmp/mysql.sock -h localhost -u user -p password -e INNODB
??-d 數據庫名
??-f 之前生成的數據庫記錄所在的目錄
??-u MySQL的用戶名
??-p 相應用戶的密碼
7)設置環境變量
??shell> export USE_PGPOOL=0
??shell> export LD_LIBRARY_PATH=/usr/local/mysql/lib
??
8)運行DBT-2
??shell> sudo scripts/run_workload.sh -c 16 -d 300 -n -w 10 -s 10 -u user -x password
??-c 并發的線程數
??-d 執行的時間(秒)
??-n 無思考時間,作者說如果想看數據庫性能,請不要漏掉這個選項
??-w 數據倉庫個數
??-s 每個新線程開始前的延遲時間(微秒)
??-u MySQL用戶名
??-x MySQL相應用戶的密碼
??-l MySQL TCP/IP端口號
??-H MySQL主機名
輸出的結果在/home/liova/download/dbt2-0.40/scripts/output/? ? ? ? 對應的實驗目錄下的
如:/home/liova/download/dbt2-0.40/scripts/output/17/driver/results.out
二、TPC-H(參考:http://my2iu.blogspot.com/2009/0 ... eries-on-mysql.html? ? ? ? Running TPC-H Queries on MySQL,需要掛代理,附2;http://www.pilhokim.com/index.php?title=Project/EFIM/TPC-H? ? ? ? Project/EFIM/TPC-H??By Pilho Kim)
1)下載TPC-H的代碼,用來生成所需要的數據
??http://www.tpc.org/tpch/spec/tpch_2_8_0.zip?或者
??http://www.tpc.org/tpch/default.asp? ? ? ? 右邊欄
??兩版本略有不同
2)創建MySQL用戶、數據庫、及授權
??mysql -u root -p
??mysql> CREATE USER 'tpch'@'%' IDENTIFIED BY 'tpch';
??mysql> CREATE DATABASE tpch;
??mysql> GRANT ALL ON tpch.* to 'tpch'@'%';
??mysql> USE tpch;
3)運行tpch目錄下的dss.ddl文件,創建tpch數據庫中的表
??mysql> \. tpch/gen/dss.ddl
4)然后在tpch文件目錄下,把makefile復制并改名成makefile,接著修改makefile文件
??shell> cp makefile.suite makefile
??shell> vim makefile
??makefile中相應項后面填寫:
??CC? ?? ?= gcc??# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)??#? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? SQLSERVER, SYBASE??# 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? ? ? ??
5)修改tpch.h文件
??修改其中的SQLSERVER段為:
??#ifdef??SQLSERVER
??#define GEN_QUERY_PLAN? ? ? ? "EXPLAIN;"
??#define START_TRAN? ? ? ? ? ? ? ? "START TRANSACTION;\n"
??#define END_TRAN? ? ? ? ? ? ? ? "COMMIT;\n"
??#define SET_OUTPUT? ? ? ? ? ? ? ? ""
??#define SET_ROWCOUNT? ? ? ? ? ? ? ? "limit %d;\n"
??#define SET_DBASE? ? ? ? ? ? ? ? "use %s;\n"
??#endif
6)執行makefile
??shell> make
7)生成需要用的數據
??shell> ./dbgen -s 1
??-s 數據規模因子,1為1G的數據量
8)修改tpch目錄下的dss.ri文件
??1.刪除 "CONNECT TO TPCD;"
??2.刪除所有的 "TPCH."(注意有個點)
??3.刪除所有的"COMMIT WORK;"(注意分號也要刪除)
9)登錄MySQL,并載入之前生成的數據進MySQL
??shell> mysql -u tpch -p
??mysql> use tpch;
??mysql> LOAD DATA LOCAL INFILE 'customer.tbl' INTO TABLE CUSTOMER FIELDS TERMINATED BY '|';
??mysql> LOAD DATA LOCAL INFILE 'orders.tbl' INTO TABLE ORDERS FIELDS TERMINATED BY '|';
??mysql> LOAD DATA LOCAL INFILE 'lineitem.tbl' INTO TABLE LINEITEM FIELDS TERMINATED BY '|';
??mysql> LOAD DATA LOCAL INFILE 'nation.tbl' INTO TABLE NATION FIELDS TERMINATED BY '|';
??mysql> LOAD DATA LOCAL INFILE 'partsupp.tbl' INTO TABLE PARTSUPP FIELDS TERMINATED BY '|';
??mysql> LOAD DATA LOCAL INFILE 'part.tbl' INTO TABLE PART FIELDS TERMINATED BY '|';
??mysql> LOAD DATA LOCAL INFILE 'region.tbl' INTO TABLE REGION FIELDS TERMINATED BY '|';
??mysql> LOAD DATA LOCAL INFILE 'supplier.tbl' INTO TABLE SUPPLIER FIELDS TERMINATED BY '|';
10)執行tpch目錄下的dss.ri
??mysql> \. dss.ri
11)由于查詢中使用的是小寫表名,而使用dss.ddl生成的表名是大寫的,所以轉換表名成小寫
??mysql> alter table NATION rename nation;
??mysql> alter table SUPPLIER rename supplier;
??mysql> alter table REGION rename region;
??mysql> alter table PARTSUPP rename partsupp;
??mysql> alter table PART rename part;
??mysql> alter table ORDERS rename orders;
??mysql> alter table LINEITEM rename lineitem;
??mysql> alter table CUSTOMER rename customer;
12)執行(最后這步有點錯誤,暫時沒找到解決的辦法,哪位老大解決了教我呀呀呀,thx~~)
??cp dists.dss queries
??cd queries
??../qgen -c tpch -s 1 1?
12)我所用的替代方法
??在tpch目錄的queries子目錄下,新建文件:Q1.sql,Q2.sql,…,Q21,sql,Q22.sql
??在每個文件中添加相應的查詢(http://www.pilhokim.com/index.ph ... C-H_default_queries,TPC-H的默認查詢,經過MySQL 5.1.23測試通過,附3)
13)登錄MySQL,手動執行TPC-H的默認查詢
??shell> mysql -u tpch -p
??mysql> use tpch;
??mysql> source /home/liova/download/tpch/queries/Q1.sql;
??mysql> source /home/liova/download/tpch/queries/Q2.sql;
??…
??…
??mysql> source /home/liova/download/tpch/queries/Q22.sql;
三、TPC-W (相關文檔:Installing and Getting TPC-W to run on Virtuoso-12.pdf ? ? ? ? By Ashish Gupta以及網站http://mitglied.multimania.de/jankiefer/tpcw/index.html, TPC-W Java Implementation)
1)下載 TPC-W Java版?http://mitglied.multimania.de/jankiefer/tpcw/index.html
??比較難下載,很經常下一半丟失連接,多試幾次,下完全的文件tpcw-java-dist-1.0.zip大小為1.13M。
2)下載并安裝Tomcat(可參考http://deepfuture.廣告.com/blog/591885)
??1.安裝jdk6
? ? shell>sudo apt-get install sun-java6-jdk(用新得立軟件包安裝)
??2.下載tomcat6
? ? 下載地址是:http://tomcat.apache.org/
? ? 本次安裝的是:apache-tomcat-6.0.18.tar.gz
??3.安裝
? ? 將壓縮包拷貝到你自己想放的目錄下,這里是/home/liova/download/tpcw/
? ? shell>sudo cp apache-tomcat-6.0.18.tar.gz /home/liova/download/tpcw/
? ? 解壓文件
? ? shell>cd /home/liova/download/tpcw/
? ? shell>sudo tar zxvf apache-tomcat-6.0.18.tar.gz
? ? 解壓完成后,會在 /home/liova/download/tpcw/ 下生成文件夾 apache-tomcat-6.0.18
? ? 在/usr/local 下建立軟鏈接,名字是tomcat6
? ? shell>cd /usr/local
? ? shell>sudo ln -s /home/liova/download/tpcw/apache-tomcat-6.0.18 tomcat6
? ? 測試tomcat是否能夠正常啟動
? ? shell>sudo /usr/local/tomcat6/bin/startup.sh? ? ? ? (這里圖簡單沒有配置tomcat開機啟動,所以以后每次重啟都要先執行這條命令開啟tomcat)
? ? 打開firefox,輸入http://localhost:8080/,如果正常訪問,則表示成功。
3)下載并安裝Apache Ant來編譯Java代碼(可參考http://wangxc.廣告.com/blog/665521)
??1.下載地址 Ant:?
? ? 地址:http://ant.apache.org/?
??2.解壓ANT包
? ? tar zxvf apache-ant-1.8.1-bin.tar.gz?
??3.將解壓的Ant文件移動到/opt/ant目錄下
? ? mv apache-ant-1.8.1 /opt/ant
??4.修改配置文件中的環境ANT_HOME?
? ? sudo vim /etc/profile
? ? 在文件末尾添加如下,在umask前加上#
? ??
? ? #umask 022? ??
? ? export JAVA_HOME=/usr/lib/jvm/java-6-sun? ??
? ? export MVN_HOME=/opt/maven? ??
? ? export ANT_HOME=/opt/ant? ??
? ? export PATH=$ANT_HOME/bin:$MVN_HOME/bin:$PATH:
4)安裝MySQL
??略.
5)下載JDBC MySQL驅動
??http://dev.mysql.com/downloads/connector/j/3.0.html
??解壓后復制mysql-connector-java-3.0.15-ga-bin.jar到此路徑下(不存在則自己創建):/usr/local/tomcat/webapps/tpcw/WEB-INF/lib
6)下載servlet.jar
??下完復制到此路徑下(不存在則自己創建):/usr/local/jakarta-tomcat-6/server/lib/servlet.jar
7)設置參數
??1.根據自己的路徑在/etc/profile末尾添加:? ??
? ?export CLASSPATH=/usr/local/jakarta-tomcat-6/server/lib/servlet.jar:/usr/lib/jvm/:/home/liova/download/tpcw/tpc-w/:/usr/lib/jvm/java-6-sun-1.6.0.20/lib/dt.jar:/usr/lib/jvm/java-6-sun-1.6.0.20/lib/tools.jar:$CLASSPATH
??2.解壓剛開始下載的tpcw-java-dist-1.0.zip文件,我這里解壓到路徑/home/liova/download/tpcw/tpc-w/下,修改其中的main.properties和tpcw.properties
? ??
? ? 下面是我的main.properties(最后的dbName確實要用std,但之后我們在數據庫里建的數據庫名是用tpcw):
##############################################################################
# main.properties for build.xml.
# Copyright 2003 by Jan Kiefer.
#
# This file is distributed "as is". It comes with no warranty and the?
# author takes no responsibility for the consequences of its use.
#
# Usage, distribution and modification is allowed to everyone, as long?
# as reference to the author(s) is given and this license note is included.
###############################################################################
<!-- Path to servlet.jar, change this ... -->
cpServ=/usr/local/jakarta-tomcat-6/server/lib/servlet.jar
#<!-- Path to the JDBC driver for your DBMS, change this ... -->
cpJDBC=/usr/local/tomcat6/webapps/tpcw/WEB-INF/lib/mysql-connector-java-3.0.17-ga-bin.jar
#<!-- Directory where tpcw.war will be put with task 'inst' -->
webappDir=/usr/local/tomcat6/webapps/tpcw
#<!-- Path to the Perl interpreter. -->
perlPath=/usr/bin/perl
#<!-- Directory where the Images will be put with task genimg. -->
imagesDir=${webappDir}/Images
#<!-- Filter file for SQL queries, change this if needed -->
sqlFilter=sql-mysql.properties
dbName=std
#dbName=tpcw
? ? 以及我的tpcw.properties:
##############################################################################
# tpcw.properties for build.xml.
# Copyright 2003 by Jan Kiefer.
#
# This file is distributed "as is". It comes with no warranty and the?
# author takes no responsibility for the consequences of its use.
#
# Usage, distribution and modification is allowed to everyone, as long?
# as reference to the author(s) is given and this license note is included.
##############################################################################
# set the JDBC parameters
jdbc.driver=com.mysql.jdbc.Driver
#jdbc.driver=com.mckoi.JDBCDriver
jdbc.path=jdbc:mysql://localhost:8080/tpcw?user=tpcw&password=tpcw
jdbc.connPoolMax=100
#sql.bigCharType=varchar(500)
sql.bigCharType=tinyblob
# set the values you want for tpcw
num.item=1000
num.eb=10
# use the right session string for your servlet container
#sessionIdString=$sessionid$
sessionIdString=jsessionid=
standardUrl=http://localhost:8080
#servletUrlPath=/servlet
servletUrlPath=/
tpcwUrlPath=/tpcw
? ??
8)在MySQL中傳見數據庫tpcw,并給數據庫tpcw的權限給用戶tpcw
??create database tpcw;
??GRANT ALL PRIVILEGES ON tpcw.* TO tpcw@'%' IDENTIFIED BY "tpcw" WITH GRANT OPTION;
9)修改函數名。
??/home/liova/download/tpcw/tpc-w/src/rbe/util/Debug.java中
??public class Debug {??public static void assert(boolean assertCond, String message)
??把assert改成你自己想要的名字,我是改成assert1。
??接著以下三個文件中所有出現的Debug.assert中的assert都改成你自己修改函數名,我這里改完是Debug.assert1
??/home/liova/download/tpcw/tpc-w/src/rbe/EB.java
??/home/liova/download/tpcw/tpc-w/src/rbe/util/CharSetStrPattern.java
??/home/liova/download/tpcw/tpc-w/src/rbe/util/Histogram.java
10)cd /home/liova/download/tpcw/tpc-w/
??1.執行命令
? ? ant dist? ? ? ? (這條命令用來編譯servlets以及rbe java文件)
? ? ant inst? ? ? ? (這命令執行后,將把tpcw.war包移動到tomcat的tpcw目錄下)??
??2.創建數據庫中的表及記錄,執行
? ? ant gendb? ? ? ? (這命令將調用TPCW_populate.class)
??3.創建圖像
? ? ant genimg? ? ? ? (這命令將用make編譯圖像生成工具,用perl去運行圖像生成腳本,復制靜態圖像到tomcat主目錄)
11)修改/usr/local/tomcat6/conf/下的server.xml,在<host></host>標簽中間添加如下代碼:
? ?<Context path="/tpcw" docBase="/tpcw/tpcw.war" debug="0" reloadable="false" crossContext="true" privileged="false">
? ?<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_tpcw_log." suffix=".txt" verbosity="0" timestamp="true"/>
? ?</Context>?
做到這里就安裝好了,可以運行了。
可以訪問http://localhost:8080/tpcw/TPCW_home_interaction頁面測試是否安裝成功。
12)運行TPC-W
? ?1.cd /home/liova/download/tpcw/tpc-w/dist/
? ?2.sudo java rbe.RBE -EB rbe.EBTPCW1Factory 30 -OUT run1.m -RU 100 -MI 1000 -RD 100 -WWW http://localhost:8080/tpcw/ -CUST 10000 -ITEM 10000
? ?命令的解釋可參考/home/liova/download/tpcw/tpc-w/docs/use.html以及/home/liova/download/tpcw/tpc-w/dist/doc/readme-rbe.txt
? ?輸出的結果在/home/liova/download/tpcw/tpc-w/dist/下的run1.m文件中(名字自己在參數的指定)
ps:
如果運行中出現EB error, unable to open url……, 可以看見url中有UNAME和PASSWD字段,這代表用戶名和密碼。一般出錯的原因是數據庫tpcw中的customer表中沒有相對應用戶的記錄(所有用戶信息都在customer表中),可能是由于創建數據庫記錄過程中一些記錄的用戶名和密碼被截斷了,我因為圖簡單沒去找代碼中哪出錯(哪為老大要是解決了希望能分享啊分享啊啊啊,thx~~),我直接修改了數據庫中的相應記錄。比如:
tpcw中customer表中,我把某條記錄修改為:
c_uname? ? ? ? ? ? ? ? c_passwdOGALININRE? ? ? ? ogalininre? ? ? ? ->? ? ? ? OGALINININRE? ? ? ? ogalinininre
總結
以上是生活随笔為你收集整理的[笔记] 大家一起来测试,benchmark起来(MySQL下的TPC-C,TPC-H,TPC-W)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TPC-W安装与配置(威斯康星大学Jav
- 下一篇: ubuntu11.10 安装tpc_w