[Oracle]利用開源工具實現自己的TPC-C
最後更新:2017-02-28
來源:互聯網
上載者:User
oracle
[Oracle] How to Use Open Source Tools to Implement Your Own TPC-C
作者:Fenng
日期:Mar 14 2004 (v0.13)
網站:Http://www.dbanotes.net
本文簡介
介紹如何利用開源工具實現Oracle資料庫環境中的TPC-C.對DBA、開發人員、BI實施者有一定的參考價值.
引言描述
設想一下這樣一種情況:
您正在負責公司的一個OLTP類型的資料庫專案,面臨資料庫伺服器選型的問題:如何選擇硬體才能滿足產品環境的業務要求? 這個事情是“拍腦袋” 能決定的嗎?
不可否認,硬體選型是一門藝術,選擇合適的硬體,能給公司節省大筆的費用,選擇不能滿足業務需求的伺服器產品,不但花了冤枉錢,還會對將來的業務產生影響。
可能大家首先會想到參考伺服器的TPC-C的資訊。提到TPC-C,可能很多人對此都感到既熟悉又陌生,因為經常聽人說起,但是具體的問下去,能說清楚的又沒有多少人,而且,從大家口中得到的還不盡相同。那麼什麼是TPC/TPC-C這些都代表什麼意思呢?
什麼是TPC?
TPC(Transaction Processing Performance Council,交易處理效能委員會)是一個非盈利性的組織,其官方網站在http://www.tpc.org。其宗旨是為了制定商務應用基準程式(Benchmark)的標準規範,提供效能和價格度量,並管理測試結果的發布。在業界極其具有權威性。
TPC的基準程式的標準規範(Standard Specification)是對公用開放的,可以在官方網站上得到,但是TPC卻不提供基準程式的代碼。任何軟硬體廠商或其它測試者可以根據標準規範,最優地構建自己待測的系統。為保證測試結果的客觀性,被測試者(通常是廠家)必須提交給TPC一套完整的報告(Full Disclosure Report),包括被測系統的詳細配置、分類價格和包含五年維護費用在內的總價格。該報告必須由TPC授權的審核員核實(TPC本身並不做審計)。
什麼是tpmC?
先說一下TPC-C,TPC-C是聯機交易處理(on-line transaction processing , OLTP)的基準程式。TPC-C類比一個批發商的貨物管理環境。TPC-C使用三種效能和價格度量,其中效能由TPC-C吞吐率衡量,單位是tpmC。tpm是transactions per minute的簡稱;C指TPC中的C基準程式。它的定義是每分鐘內系統處理的新訂單個數。
瞭解了這些內容,您可能會想:我們公司的PC伺服器完全是自己攢出來的,如何進行TPC-C的衡量的?也去參考TPC官方網站上的資訊?不要忘了,TPC.org 上公布的測試結果都是各大廠商根據自己的系統進行了充分最佳化之後的出來的結果。打個比方,TPC公布的數值就好比嶄新的法拉利跑車經過專業技師們的精心檢查保養,然後在專用跑道上跑出來的速度值,而我們的情況可能是法拉利(甚至是夏利)要在鄉村土路上行駛,可比性大打折扣。
有的朋友會想:那我們可以根據自己的情況,拿一個秒錶在“鄉村土路”上測試一下看看呀。這樣的意義也是顯而易見的,對我們的實際的環境不是更具有參考價值?不錯,這也正是本文的目的:讓我們利用開源(Open Source)工具來實現自己的針對Oracle資料庫的TPC-C。
Hammerora—The Open Source Oracle Load Test Tool
首先介紹一下Hammerora。從創作者對這個工具的標題描述可以看出,Hammerora是一款Oracle資料庫負載測試工具。該工具可以在Oracle 8i、9i和10g等版本上使用。
當前可以用在Linux/Unix和Windows上.初步實現了跨平台.Hammerora 完全用TCL/TK寫就,以GPL著作權形式發布。作者是Steve Shaw。
該項目的首頁在:http://sourceforge.net/projects/hammerora/ 。
圖1: Hammerora的Logo
Hammerora的設計原理是解析Oracle的Trace檔案,並把它們轉化為Oratcl程式,然後在Oracle資料庫中用多個使用者並發的對使用者的事務進行“回放”。我們知道,Oracle的Trace檔案能夠翔實的記錄使用者對資料庫的操作。這樣Hammerora能夠保證對使用者環境的真實類比。
Hammerora最初是用以學習的目的:期望是類比資料庫的一定數量的使用者。這樣一個小的基於家庭的學習開發系統就能夠比較接近產品環境。這個工具已經成長為一個Oracle資料庫做壓力測試--從小的資料庫到大的基於RAC的叢集。
TCL語言已經用來提供高效能的和Oracle資料庫的OCI整合,而無需重新編譯產生的程式。每個產生的程式具有嚴格的TCL/Oratcl相容性,並且可以在Hammerora的命令列Shell下運行。TCL的強大功能和靈活性意味著潛在的功能是無窮盡的。TCL線程包用來實現對Oracle資料庫的多個並發串連。
Hammerora包含Oracle預存程序和TCL驅動指令碼用來運行TPC-C基準程式。但是,我們先要構建一個同TPC-C規範相符的資料庫。這樣,我們需要用到Orabm。
Orabm
Orabm是Geoff Ingram (High-Performance Oracle: Proven Methods for
Achieving Optimum Performance and Availability一書的作者)構建的一個程式包,包含了一套SQL指令碼和幾個命令列程式。Orabm資料裝載程式(Orabmload)構建了一組遵從TPC-C標準的資料用以測試。Orabm的程式包和原始碼可以從它的首頁面http://www.linxcel.co.uk/orabm/ 得到。
Orabm的運行機制
Orabm的運行機制在Geoff Ingram有明確的說明,這裡翻譯如下:Orabm 通過在每個使用者指定的並發資料庫會話(session)中運行使用者執行數量的資料庫事務來進行工作.事務通過ORABM模式下的ORABM_SERVERSIDE_STRESS預存程序運行.
對每個並發會話來說,ORABM_SERVERSIDE_STRESS 運行在orabm命令列下指定的事務數,並返回該會話在採樣間隔完成時的TPS值.要確保所有並發會話都是在採樣間隔期間處理事務,TPS值僅包括事務的中間的80%,也即:初始的10%和最後的10%將忽略掉.
更詳細資料可以參考http://www.linxcel.co.uk/orabm/的內容.
安裝步驟
1 安裝Oracle OCI 庫
對Oracle 9i 來說,如果沒有安裝該組件的話,可能要重新運行runInstall,在Oracle 9i Client products樹中選擇"Oracle Call Interfaces" .
對Oracle 10g來說,Oracle 10 OCI 庫應該是預設安裝的.
2 安裝TCL
cd /usr/local/src/tcl8.4.5/unix
rm -f config.cache
./configure --enable-threads --enable-shared
make clean
make
make install
3 安裝TK
cd /usr/local/src/tk8.4.5/unix
rm -f config.cache
./configure --with-tcl=../../tcl8.4.5/unix --enable-threads --enable-shared
make clean
make
make install
4 安裝TCL Threads
cd /usr/local/src/thread2.5.2/unix
rm -f config.cache
sh ../configure --enable-threads --enable-shared
make clean
make
make install
5 安裝Oratcl
對10g來說,要編輯設定檔,在1728 行附近, FOUND_ORACLE=0 那一行的下面添加如下部分內容:
echo "checking for Oracle 10.0 style toplevel (libclient10.a)" 1>&6
echo "configure:1730: checking for Oracle 10.0 style toplevel (libclient10.a)" >&5
for f in $oracle_directory $oratest1 $oratest2 $oratest3 $oracle4 /opt/oracle /u/oracle /usr/oracle /usr/local/oracle ; do
echo "$ac_t""looking for lib/libclient10.a in $f" 1>&6
if test -r "$f/lib/libclient10.a" ; then
ORA="$f/lib"
ORACLE_HOME=$f
echo "$ac_t""setting ORA to $ORA" 1>&6
testver=10
ORA_MAJOR_VERSION=10
ORA_MINOR_VERSION=0
FOUND_ORACLE=1
break
fi
done
export ORACLE_HOME=your_oracle_home_directory
cd /usr/local/src/oratcl-4-1-branch/unix rm -f config.cache
sh ../configure --with-tcl=../../tcl8.4.5/unix --with-oracle-directory=$ORACLE_HOME --with-oracle-version=9 ( or 10 or 8! ) --enable-threads --enable-shared
注:紅色部分為針對不同的資料庫版本需要做的調整.
vi Makefile – 把所有的 -rpath 改做 -Wl,-rpath,
make clean
make
make install
sqlplus orabm/orabm @delivery_sp.sql
sqlplus orabm/orabm @new_order_sp.sql .
sqlplus orabm/orabm @ostat_sp.sql
sqlplus orabm/orabm @payment_sp.sql
sqlplus orabm/orabm @slev_sp.sql
步驟操作
命令
1建立 ORABM使用者(用TOOLS做預設資料表空間, TEMP 資料表空間為暫存資料表空間)
sqlplus system/pwd @orabm_user
2
建立表
sqlplus system/pwd @orabm_tab
3
裝載資料
$orabmload Warehouses 1
4
建立索引
sqlplus system/pwd @orabm_ind
5
分析表和索引
sqlplus system/pwd @orabm_analyze
6
建立壓力測試PL/SQL 過程
sqlplus system/pwd @orabm_serverside_stress
7
把表和索引資料緩衝到SGA
sqlplus system/pwd @orabm_cache
把tpc-c.tcl指令碼載入Hammerora中(remember to change the file filter from *.trc to *.tcl to see TCL files),在該tpc-c.tcl中尋找connect字串,調整為你的資料庫使用者串連資訊。並調整虛擬使用者資訊。
測試回合
運行Hammerora,建立需要的使用者數, 來類比TPC-C 基準程式(注意調整好執行Hammerora程式的環境變數,最好直接用Oracle使用者來執行). 下圖為筆者膝上型電腦上得到的資料[機器效能查了一點兒 :) ] :
圖2: Hammerora測試結果樣本
參考資訊
http://hammerora.sourceforge.net/ Hammerora的首頁.當前的軟體版本是1.15.
http://www.linxcel.co.uk/orabm/ Geoff Ingram維護的個人網站.該網站上還有一個很有趣的工具orastress.用來進行Oracle資料庫壓力測試.
http://www.tpc.org TPC官方網站.
http://www.cnoug.org/viewthread.php?tid=63技術高手RudolfLu很早以前就曾對orabm這個工具做過介紹.
http://www.dbanotes.net/Oracle/Install-Oracle10g-RHEL3.htm Installing Oracle 10g on RHEL AS 3 Step-by-Step
本文作者
Fenng,某美資公司DBA,業餘時間混跡於各資料庫相關的技術論壇且樂此不疲。目前關注如何利用ORACLE資料庫有效地構建公司專屬應用程式。對Oracle tuning、troubleshooting有一點研究。個人技術網站: http://www.dbanotes.net/。可以通過電子郵件 dbanotes@gmail.com 聯絡到他。
原文出處
http://www.dbanotes.net/Oracle/Use_OpenSourceTool_implement_YourOwn_TPC-C.htm
回首頁
All Articles (by Fenng) are licensed under a Creative Commons License.
I would welcome any feedback. Please send questions, comments or corrections to dbanotes@gmail.com