壓測工具swingbench和sysbench對比(r12筆記第13天)
今天來說說兩款壓測工具sysbench,swingbench,早些時候傻傻分不清楚,其實兩個差別大了去了。
swingbench
先來說說swingbench,這款工具是Oracle英國的一個員工用Java開發的,沒想到一下子成了壓測Oracle的不二之選。當然Oracle還有不少這樣的工具,比如DUL(Data UnLoader),是紐西蘭的一個員工用c開發,一個可以直接讀取資料檔案的工具,基本是ACS部門在提供高階服務所用。還有一款是SQLT也叫作SQLTXPLAIN,是Oracle Server Technologies Center of Expertise - ST CoE 提供的一款工具,可以通過MOS ID(ID 215187.1)下載,當然這樣的工具還不少。
回到我們的話題,swingbench因為基於Java的原因,所以跨平臺的支援還是很不錯的。基本上我們是在Windows平臺上測試服務端的資料庫效能,用到了Java,那麼使用JDBC是很自然的一件事情。
swingbench的設計風格是完全的元件化,每個元件可以單獨抽出來使用,所以你如果到支援的站點去檢視。宣傳的元件圖還是很霸氣的。比如swingbench的主介面,資料生成器,追蹤分析。
還有更炫的。監控資料庫的多項指標,DB time等。這效果和商用的spotlight監控有一拼。
毫無疑問,swingbench是個好東西,一個工具箱繼續發揚光大,得靠大家的使用和推廣普及。有句話說得好,世上只有兩種工具,一種是被人罵的,另一種是沒人用的,被罵的越多,側面反映出關注度越高,使用率越高,越用越成熟,這個MySQL就是一個很不錯的例子。
swingbench支援的功能如此豐富,可以指定多個數據倉庫,可以生成指定大小的資料,測試是基於訂單業務,模擬的場景更加豐富,它有什麼缺點嗎?有的。
首先個人感覺最大的一點是它只支援Oracle,其實基於JDBC就是一個輕量級的介面,可以連線多種資料庫。資料庫工具松鼠就是這樣,一個JDBC可以適配很多的資料庫。如果在這一點上有所突破,我覺得還是有很大的潛力的。
還有基於這個工具的特性,支援Oracle平臺,似乎離開源社群還有一定的距離,儘管這個工具確實是開源的,我查了下github上暫時還沒有看到,目前的支援是通過站點http://www.dominicgiles.com/swingbench.html來維護的,目前最新的版本是2.6,已經支援12c.
sysbench
這款工具和swingbench有一個共同點,那就是它也是Oracle的一個員工開發的,不過屬於MySQL team,後來到了Percona.
一個公司竟然能夠產出兩種風格的軟體,和本身支援的資料庫是有明顯的關係的,這句話可能比較繞。我逐漸展開來說,先說說我最近安裝,使用sysbench的一些感受。
如果使用sysbench比較早一些的版本,應該就是0.4.12了。這個版本最早也是有一個單獨的站點來維護的,launchpad.net,目前已經全面轉移到github上了。
這個工具基於c開發,目前支援的資料庫種類很豐富。
# find . -name "drv*.c"
./drizzle/drv_drizzle.c
./pgsql/drv_pgsql.c
./mysql/drv_mysql.c
./oracle/drv_oracle.c
./attachsql/drv_attachsql.c
其中MySQL,這是原生支援,預設就有的。還支援PostgreSQL和Oracle,還有一個MySQL的分支drizzle也是支援的。
0.4.12的版本很多年前就在用,優點很多,可以壓測記憶體,CPU,IO,mutext等都可以測試,支援的資料庫壓測是其中的一個部分。這部分功能基於c的優勢就很明顯了。
但是0.4.12這個版本限制還是比較多,比如只能基於一個數據庫的一個一個表來壓測,這一點來說限制就很大了。所以能夠測試的場景還是很有限的。
到了0.5的版本,這個情況改觀了,可以一個庫裡多表了,而且可以設定interval引數來檢視一個實時的變化了。因為它支援Oracle,所以我就很有興趣的測試了一下,結果讓我有點受挫。
為什麼呢,0.5的版本中安裝Oracle,主要就是一個動態連結庫的配置要到位,但是配置好之後要開啟測試的時候,發現數據庫的驅動選擇了oracle,但是測試卻提示unknown database,帶著疑問細看,原來測試的模板裡竟然沒有Oracle.這個怎麼辦自己動手豐衣足食,不過要寫還確實有難度,為什麼呢,因為模板是基於指令碼語言Lua的,這又多了一道坎。
不過行業裡也有不少朋友寫了一些Lua的模板可以參考。
這裡我訴訴苦,那就是sysbench最新版本是1.0.3,我想新版本支援Oracle應該已經做得很好了,看官方的提示,對於Oracle安裝還單獨提供了一個README-Oracle.md,但是裡面的安裝提示還是和我預期的有一些差別。
首先是安裝的客戶端,目前提供的是12c的精簡版,這個沒有問題,但是基於的作業系統是ubuntu 14,對於Oracle企業版來說是沒有官方認證的,Linux版本Oracle官方可查到的,支援的系統基本是下面的這幾個,版本會有一些變化。
Red Hat Enterprise Linux AS/ES
Oracle Enterprise Linux ( OEL)
SUSE Linux Enterprise Server
Asianux
Ubuntu也是Linux,但是後面的安裝就讓我有了不少的難度,需要安裝Cuda,而且是使用dpkg,這部分很陌生,查了下原來dpkg 是Debian package的簡寫,為"Debian" 作業系統專門開發的套件管理系統,用於軟體的安裝,更新和移除。 安裝一套Cuda環境,我查了下,要花的功夫還真不少,最後輾轉嘗試,算是放棄了。
於是回到0.5的版本來,配置了動態連結庫,很快就配置好了,但是沒有Lua模板,這個時候可以參考osdba提供的一套定製版,可以支援MySQL,Oracle,PostgreSQL,我試了下,還不錯。
整個過程如果使用git分分鐘即可搞定。
抓取sysbench的安裝部分
# git clone https://github.com/osdba/sysbench_bin.git
然後抓取Lua指令碼部分
# git clone https://github.com/osdba/sysbench_lua
然後建立一個sysbench目錄,把抓取到的兩個目錄整合起來。
# mkdir sysbench
# cd sysbench
# cp ../sysbench_bin/bin/* .
# cp -r ../sysbench_lua/lua .
這樣一來目錄下就有了3個執行檔案,和直接使用sysbench的命令方式基本一樣,只是有所側重。
-rwxr-xr-x 1 root root 3307216 Mar 24 16:09 sysbench_mysql
-rwxr-xr-x 1 root root 3324397 Mar 24 16:09 sysbench_ora
-rwxr-xr-x 1 root root 3253979 Mar 24 16:09 sysbench_pg
小結
這兩個壓測工具還是有很鮮明的特點,也有自己固有的缺點,但是瑕不掩瑜,它們都有自己擅長的領域和亮點特性。所以測試還是得看場景,基準測試真是一塊硬骨頭。