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...