1. 程式人生 > >[筆記] 大家一起來測試,benchmark起來(MySQL下的TPC-C,TPC-H,TPC-W)

[筆記] 大家一起來測試,benchmark起來(MySQL下的TPC-C,TPC-H,TPC-W)

前段時間在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.

相關推薦

[筆記] 大家起來測試benchmark起來(MySQLTPC-C,TPC-H,TPC-W)

前段時間在MySQL下做了些類基準測試,帖出小結。其中遇到許多小問題,不知道有遺漏步驟沒,也還有些問題沒解決,希望大家討論討論,一起測試起來吧,嘿嘿~環境:ubuntu9.10Server version: 5.1.37-1ubuntu5.4 (Ubuntu)一、TPC-

網友:有沒有段程式碼起來簡單實則威力無窮程式設計師:有啊

話不多說,直接上圖 程式碼:System.exit(0); 這句程式碼,很簡單,但是也非常暴力。就是結束整個程式。 1、下面先演示下不加上這個語句: 然後控制檯輸出兩個println; 2、現在加這句程式碼放在中間 然後執行的效果就是: 3、現在把語句放在開頭

Django學習筆記)——安裝創建項目,配置

lvs csv oot url root import 方式 配置文件 函數 瘋狂的暑假學習之 Django學習筆記(一) 教材 書《The Django Book》 視頻:csvt Django視頻 1.創建項目

Software Testing 閱讀筆記測試概述

為什麼測試?1、對質量可接受性做出判斷     2、發現問題 錯誤:mistake ,在程式中出現的錯誤稱為bug 缺陷:是錯誤的結果,錯誤的表現 失效:當缺陷執行時會發生失效 事故:當出現失效時,可能會也可能不會呈現給使用者事故 下面是一個測試

Java NIO 學習筆記)----概述Channel/Buffer

Java NIO (來自 Java 1.4)可以替代標準 IO 和 Java Networking API ,NIO 提供了與標準 IO 不同的使用方式。學習 NIO 之前建議先掌握標準 IO 和 Java 網路程式設計,推薦教程: 系統學習 Java IO----目錄,概覽 初步接觸 Java

軟體測試讀書筆記測試概述

                         一測試概述 軟體危機曾經是軟體界甚至整個計算機界最熱門的話題。為了解決這場危機,軟體從業人員、專家和學者做出了大量的努力。現在人們已經逐步認識到所謂的軟體危機實際上僅是一種狀況,那就是軟體中有錯誤,正是這些錯誤導致了軟體開發

python學習筆記)執行輸入輸出資料型別

開學到現在6個星期過去了,前段時間真的是太忙了一直沒有時間更新自己的部落格。最近比較空,計劃把學的python跟opengl好好總結一下。 python執行方式   互動模式 命令列下直

Redis學習筆記)關於在windows64位環境的安裝學習使用

客戶端 mas key-value 錯誤 services 再次 基準 alt 類型 前言 由於工作需要,目前我正在學習使用Redis。我當時學習Redis就從網上下載了點資料就開始學習了。入門看的是《REDIS入門指南》,這本書個人覺得很適合新手用來學習接觸。根據書上的引

Django學習筆記》初始化pycharm和mysql資料庫及相關環境

真的不太好學啊!記錄一下筆記,要不有的東西老師要查! CSRF驗證 防止偽造資料新增資料庫,關閉方式 MIDDLEWARE = [ 'django.middleware.security.Sec

mysql定時執行某儲存過程並實現mysql資料庫的定時備份

mysql儲存過程 1、儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它。 語法:CREATE PROCEDURE  過程名([[IN|OU

給出百分制成績要求成績等級‘A’‘B’‘C’‘D’‘E’。90分以上為A80~89為B70~79為C60~69為D60分以下為E.

#include<stdio.h> int main() { float score; char grade; printf("輸入學生的成績:\n"); scanf("%f",

小程式彈出的遮罩只有屏高度滾動顯示出面的UI

問題:彈出的遮罩,由於沒有處理小程式的滾動擊穿,在遮罩下的滾動檢視如果很長,則滑動頁面,遮罩也滾動,沒有全屏。解決辦法:將遮罩的高度設定為滾動頁面內容的高度。步驟:需要獲取滾動頁面的高度,獲取螢幕的高度。如果滾動內容的高度大於螢幕高,則設定遮罩style高度為滾動內容的高度,

[演算法入門]快速排序非遞迴方法(Java實現)大家起來找茬啊~

基礎 總結一下,快速排序的步驟: 1、找到一個key值(就是陣列第一個值),先從右到左找,找到一個比它小的值,記錄下標。 2、然後從左往右找,找到一個比它大的值,記錄下標。 3、交換找到的兩個數

分鐘快三有什麽技巧規律怎麽看大小單雙走勢技巧?大家起來交流。

部分 blank get targe 十分 走勢技巧 還要 才有 而不是 導師(768841507)曾經軟件計劃10連中,我跟第一把就死;我在想我到底是有多背?這麽小的幾率都能被我趕上?後來想了很多,想明白了一個問題,我們是在賭,也就是在賭運氣,而運氣有好的時候也有壞的

分享安微快三穩贏技巧長龍預測教你砍龍和順龍規律大家起來交流。

預測 後來 規劃 找我 否則 盈利 的人 都是 還在 導師(359213571)曾經軟件計劃10連中,我跟第一把就死;我在想我到底是有多背?這麽小的幾率都能被我趕上?後來想了很多,想明白了一個問題,我們是在賭,也就是在賭運氣,而運氣有好的時候也有壞的 時候,都是有一定概率

最近接了本分散式元件面試書的選題大家起來提意見

     最近我在清華大學出版社出了一本書,《基於股票大資料分析的Python入門實戰 視訊教學版》,京東連結:https://item.jd.com/69241653952.html,就順便又接了本選題,Java分散式高併發元件面試攻略。以前我出的書,不能說不用心,題材也不能說

【gooogleman組織】大家起來diy 超低價四核的exynos4412或者Cortex A8 S5pv210開源

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

送你份來自杭州的禮物起來

打造敏捷與運維領域標杆峰會! 2016年全球敏捷運維峰會(Gdevops, Global Devops Summit)將於2016年在杭州、北京、廣州、上海四城全面啟動,本次峰會由上海市經濟和資訊化委員會指導,上海市雲端計算產業促進中心主辦,Gdevops組委會、DBA+社群、三墩IT人聯合承辦,

Java學習筆記38:通過Spring Bean 注入static變數來設計套適合測試開發生產環境的配置項

這邊文章的目的主要是為了在spring開發web專案的時候,讓我們的測試,開發,生產環境的配置項 .properties作為配置檔案。 我們首先需要建立一個config資料夾,然後建立開發,測試,生產環境的.properties配置項檔案。 例如,dev.proper

大家起來分析一下這個SQL

今年工作遇到這樣一個問題,公司上不了網,自己寫了一下。SQL的形式大概是下面的形式。select * from (select c1, c2 from table1union allselect c1, c2 from