使用sysbench對mysql壓力測試

2021-08-20 19:34:28 字數 4168 閱讀 8579

mysql的測試工具,推薦用sysbench。雖然hammerora、super-mark、tpc-c等一些其他工具也很強大,但sysbench的檔案i/o測試與innodb的行為很相似,針對mysql也有比較完善的測試模型,還可以方便地修改lua指令碼,以實現更強大、更靈活的測試功能。其實,設計sysbench的初衷就是為了衡量mysql的效能,而很多其他工具,對於mysql的支援往往只是乙個選項,功能還不夠強大,難以模擬真實的資料庫負荷。mysql自帶的mysqlslap也是乙個不錯的工具,它是從5.1.4版開始的乙個mysql官方提供的壓力測試工具,可通過模擬多個併發客戶端訪問mysql來執行壓力測試。

這兩個工具可以滿足大部分情況下的效能測試和壓力測試。sysbench可以自定義lua指令碼,開發人員可以編寫適合自己業務邏輯的lua指令碼。當然也可以使用其他高階語言編寫測試工具,這樣會更靈活,更接近實際業務資料庫操作。

1.sysbench的使用

目前sysbench主要支援mysql、postgresql、oracle這3種資料庫。

它主要包括以下幾種方式的測試。

·fileio:檔案i/o測試。

·cpu:cpu效能測試。

·memory:記憶體效能測試。

·threads:執行緒效能測試。

·mutex:mutex效能測試。

·oltp:oltp測試,mysql一般會選擇此種測試型別。

(1)安裝

unzip sysbench-0.5.zip

cd sysbench-0.5

./autogen.sh

./configure --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib64/mysql

若是二進位制安裝:

(./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib)

make

make install

裝包解壓到/usr/local/mysql下。

(2)開始測試

在sysbench--test=memory命令後新增help可以檢視幫助。

sysbench --test=memory help

一些引數解析如下。

·--percentile 95%:響應時間,也就是刪除5%的響應時間最長的請求,然後從剩餘的請求中選取最大的響應時間值。

·--max-time:執行時間限制,單位是秒。

·--num-threads:執行緒數。

·--max-requests:查詢數限制。

下面來舉例說明。

1)cpu效能測試。

sysbench --test=cpu --cpu-max-prime=20000 run

cpu測試主要是進行素數的運算,在上面的例子中,指定了最大的素數為20000,也可以根據機器cpu的效能來適當調整數值。

如下命令,執行20s就輸出了,而不會等待命令執行完。

sysbench --test=cpu --cpu-max-prime=20000 run --max-time=20

2)執行緒測試。

sysbench --test=threads --num-threads=64 --thread-yields=1000 --thread-locks=8 run

3)磁碟i/o效能測試。

sysbench --test=fileio --num-threads=16 --file-total-size=12g --file-test-mode=rndrw prepare

sysbench --test=fileio --num-threads=16 --file-total-size=12g --file-test-mode=rndrw run

sysbench --test=fileio --num-threads=16 --file-total-size=12g --file-test-mode=rndrw cleanup

定建立文件的總大小為12gb,--file-test-mode指定文件的讀寫模式為隨機讀寫。

磁碟i/o效能測試是進行資料庫基準測試時要著重加以研究的。我們需要衡量各種因素,比如操作型別、讀寫的頻率、i/o大小、是隨機讀寫還是順序讀寫、寫的

型別是非同步還是同步、併發執行緒情況、作業系統快取狀態及檔案系統有哪些調優等因素。

檔案測試型別(file-test-mode)有如下幾種。

·seqwr:順序寫。

·seqrewr:順序重寫(rewrite)。

·seqrd:順序讀。

·rndrd:隨機讀。

·rndwr:隨機寫。

·rndrw:隨機讀寫。

4)記憶體測試。

sysbench --test=memory --memory-block-size=8k --memory-total-size=4g run

上述引數指定了本次測試的整個過程是在記憶體中傳輸4gb的資料量,每個塊(block)的大小為8kb。

5)oltp測試。

在測試之前請預先建立資料庫,並給予測試使用者足夠的許可權。

mysql > create database sbtest;

mysql > grant all privileges on sbtest.* to test@』

localhost』

identified by 『

test』

如下例子演示了多執行緒如何測試mysql。

首先初始化資料。

sysbench --test=./sysbench/tests/db/oltp.lua --mysql-table-engine=innodb --oltp-tables-count=256 --oltp-table-size=1000000 --mysql-user=test --mysqlpassword=

test --mysql-socket=/tmp/mysql.sock prepare

上述引數指定了本次測試的表儲存引擎型別為innodb,指定了表的最大記錄數為1000000,初始化生成256個表。測試oltp時,可以自己先建立資料庫sbtest,或

者自己用引數--mysql-db來指定其他資料庫。

然後進行實際測試,測試模型是oltp,併發8個執行緒,執行1個小時,如下:

sysbench --test=./sysbench/tests/db/oltp.lua --oltp-tables-count=256 --oltp-table-size=1000000 --mysql-user=test --mysql-password=test --mysqlsocket=/

tmp/mysql.sock --max-time=3600 --max-requests=0 --num-threads=8 --report-interval=10 run

其中,--report-interval=10表示每10s就輸出一次資料,輸出格式類似如下。

[ 10s] threads: 2, tps: 290.39, reads: 4065.82, writes: 1161.58, response time: 8.65ms (95%), errors: 0.00, reconnects: 0.00

[ 20s] threads: 2, tps: 270.90, reads: 3795.10, writes: 1083.80, response time: 10.14ms (95%), errors: 0.00, reconnects: 0.00

[ 30s] threads: 2, tps: 277.40, reads: 3883.50, writes: 1109.40, response time: 9.82ms (95%), errors: 0.00, reconnects: 0.00

[ 40s] threads: 2, tps: 273.50, reads: 3828.09, writes: 1094.00, response time: 9.93ms (95%), errors: 0.00, reconnects: 0.00

測試完成後,清理資料。

sysbench --test=./sysbench/tests/db/oltp.lua --oltp-tables-count=256 --oltp-table-size=1000000 --mysql-user=test --mysql-password=test --mysqlsocket=/

tmp/mysql.sock cleanup

sysbench 簡單使用

一 sysbench壓力測試工具簡介 sysbench是乙個開源的 模組化的 跨平台的多執行緒效能測試工具,可以用來進行cpu 記憶體 磁碟i o 執行緒 資料庫的效能測試。目前支援的資料庫有mysql oracle和postgresql。以下操作都將以支援mysql資料庫為例進行 1.sysben...

sysbench工具使用

automake libtool sysbench 1.0.zip yum install automake libtool mkdir usr local sysbench p cd usr local sysbench unzip sysbench 1.0.zip cd sysbench 1.0...

Golang使用sqlx包實現對mysql的操作

要sqlx包,需要先安裝 連線資料庫 func init type member struct func select fmt.println info 查詢多條 var list member err db.select list,select username,money,birthday fr...