更多博文請關注:沒有傘的孩子必須努力奔跑 (www.xuchanggang.cn)mysql
1.sysbench 簡述:sql
sysbench是一個模塊化的、跨平臺、多線程基準,主要用於評估測試各類不一樣系統、參數下的數據庫負載狀況。它主要包括如下幾種方式的測試
:
(1).cpu性能
(2).磁盤io性能
(3).調度程序性能
(4).內存分配及傳輸速度
(5).POSIX線程性能
(6).數據庫性能(OLTP基準測試)
目前sysbench主要支持 mysql,pgsql,oracle 這3種數據庫
# 注:不要認爲sysbench安裝很簡單,其實蠻複雜的,動不動就報錯,最下面了摘錄了報錯,基本上都能解決問題
2.sysbench的安裝
(2).安裝依賴環境:
yum -y install gcc automake libtool
# 如下步驟,僅針對用rpm包默認安裝mysql執行的操做,須要安裝mysql,mysql-server,mysql-libs,mysql-devel,否則會報錯
yum -y install mysql mysql-server mysql-libs mysql-devel
(3).解壓安裝sysbench
tar -xf sysbench-0.4.12.tar.gz
cd sysbench-0.4.12
./autogen.sh
./configure
make
make install
# 注:
若是想要讓 sysbench 支持 pgsql/oracle 的話,就須要在編譯的時候加上參數:--with-pgsql 或者 --with-oracle,這2個參數默認是關閉的,只有 MySQL 是默認支持的。
# 若是你的mysql是本身經過源碼編譯安裝的,則使用以下方法,指定mysql的函數庫位置和頭文件位置
./configure –with-mysql-includes=/usr/local/mysql/include –with-mysql-libs=/usr/local/mysql/lib
# --with-mysql-includes指定函數庫位置
# --with-mysql-libs指定頭文件位置
3.性能測試:
(1).cpu性能測試
sysbench --test=cpu --cpu-max-prime=20000 run
# cpu測試主要是進行素數的加法運算,在上面的例子中,指定了最大的素數爲 20000,本身能夠根據機器cpu的性能來適當調整數值,主要看total time所花費的時間
# sysbench --test=cpu --num-threads=`grep "processor" /proc/cpuinfo | wc -l` --cpu-max-prime=200000 run
# grep "processor" /proc/cpuinfo | wc -l :獲取cpu的線程數
(2).線程測試
sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
# thread-locks小於線程數除以2,lock越少,處理時間越長。
(3).磁盤IO性能測試[主要看每秒請求數(request)和整體的吞吐量(total),這兩個參數對評估磁盤性能有幫助]
# 初識準備
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw prepare
# 運行
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw run
# 清空測試數據
sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw cleanup
# 上述參數指定了最大建立16個線程,建立的文件總大小爲3G,文件讀寫模式爲隨機讀寫。
#
seqwr 順序寫 /
seqrewr 連續改寫 /
seqrd 連續讀 /
rndrd 隨機讀取 /
rndwr 隨機寫 /
rndrw 結合隨機讀/寫
(4).內存測試
sysbench --test=memory --memory-block-size=8k --memory-total-size=4G run
# 上述參數指定了本次測試整個過程是在內存中傳輸 4G 的數據量,每一個 block 大小爲 8K。
(5).OLTP測試
官方測試範例:
# 準備數據
sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password=kongzhong --mysql-socket=/var/lib/mysql/mysql.sock prepare
# 測試
sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password=kongzhong --mysql-socket=/var/lib/mysql/mysql.sock run
# 刪除數據
sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password=kongzhong --mysql-socket=/var/lib/mysql/mysql.sock cleanup
4.報錯及解決方式:
(1). make 時報錯:
drv_mysql.c:35:19: mysql.h: No such file or directory
# 由於找不到mysql 的頭文件,安裝mysql-devel、mysql-libs這兩個rpm包就能夠了[這個只針對使用rpm包安裝mysql的]
# 若是是源碼編譯安裝的,要指定: --with-mysql-includes=***** --with-mysql-libs=****
# 如: ./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib
(2).make 時報錯:
../libtool: line 838: X--tag=CC: command not found
../libtool: line 871: libtool: ignoring unknown tag : command not found
../libtool: line 838: X--mode=link: command not found
../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found
../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
../libtool: line 2231: X-g: command not found
../libtool: line 2231: X-O2: command not found
# 這個問題,通常只要先運行一次autogen.sh,而後再configure,make就能夠了;
# 若是仍是不能解決,是由於sysbench自帶的libtool 工具版本太舊。 安裝一個新版本的libtool,而後,複製libtool覆蓋sysbench下的libtool ,而後直接make[千萬不要再./configure,不然libtool又被恢復成老版的libtool]
# 如:cp /usr/bin/libtool ~/sysbench-0.4.12/
(3).安裝完成後,若是在運行時出現下面的錯誤提示:
sysbench: error while loading shared libraries: libmysqlclient_r.so.18: cannot open shared object file: No such file or directory
# 使用下面的命令查看libmysqlclient_r.so.18是否存在
# find / -name "libmysqlclient_r.so.18" -print
# 若是存在的話,網上說作軟鏈接,我試過沒用,因而使用下面的方法,就能夠了,你們能夠試試
# export LD_LIBRARY_PATH=/usr/local/mysql/lib