開源多執行緒效能測試工具-sysbench
導讀 |
sysbench是一款開源的多執行緒效能測試工具,可以執行CPU/記憶體/執行緒/IO/資料庫等方面的效能測試。資料庫目前支援
MySQL/Oracle/PostgreSQL。本文主要演示Mysql測試的用法,後續準備利用sysbench來對CPU/記憶體/IO進行一系 列的測試。具體的一些引數設定,需要根據不同的測試要求來進行調整。 |
sysbench是一個模組化的、跨平臺、多執行緒基準測試工具,主要用於評估測試各種不同引數環境下的系統或資料庫的負載情況。
本文主要學習使用sysbench來測試
下mysql資料庫的效能負載情況。
sysbench主要支援以下幾種測試模式:
- CPU運算效能
- 磁碟IO效能
- 排程程式效能
- 記憶體分配及傳輸速度
- POSIX執行緒效能
- 資料庫效能(OLTP基準測試)
目前sysbench主要支援 Mysql,Drizzle,PgSQL,Oracle等幾種資料庫。
1. 目前sysbench程式碼託管在launchpad上,專案地址: ,下載方式:
2. MySQL官方下載地址:http://dev.mysql.com/downloads/mysql/,下載方式:
1. Mysql資料庫安裝:
mysql資料庫的安裝可參考本站的另一篇文章:Mysql二進位制包安裝與配置實戰記錄 或直接透過本站右側的搜尋框搜尋Mysql會發現很多關於Mysql安裝的文章,本文不再講解。
2. sysbench編譯非常簡單,可參考 README 文件,簡單步驟如下:
tar -zxvf sysbench-0.4.8.tar.gz cd sysbench-0.4.8 ./configure && make && make install strip /usr/local/bin/sysbench 以上方法適用於MySQL安裝在標準預設目錄下的情況,如果MySQL並不是安裝在標準目錄下的話,那麼就需要自己指定MySQL的路徑了。比如我的MySQL喜歡自己安裝在/usr/local/mysql下,則按照以下方法編譯: ./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib && make && make install 當然了,用上面的引數編譯的話,就要確保你的MySQL lib目錄下有對應的so檔案,如果沒有,可以自己下載devel或者share包來安裝。 另外,如果想要讓sysbench支援pgsql/oracle的話,就需要在編譯的時候加上引數 --with-pgsql 或者 --with-oracle 這2個引數預設是關閉的,只有MySQL是預設支援的。
初始化測試庫環境(總共10個測試表,每個表 100000 條記錄,填充隨機生成的資料):
cd /tmp/sysbench-0.4.12-1.1/sysbench mysqladmin create sbtest ./sysbench --mysql-host=127.0.0.1 --mysql-port=3317 --mysql-user=tpcc --mysql-password=tpcc \ --test=tests/db/oltp.lua --oltp_tables_count=10 --oltp-table-size=100000 --rand-init=on prepare
關於這幾個引數的解釋:
--test=tests/db/oltp.lua 表示呼叫 tests/db/oltp.lua 指令碼進行 oltp 模式測試--oltp_tables_count=10 表示會生成 10 個測試表--oltp-table-size=100000 表示每個測試表填充資料量為 100000 --rand-init=on 表示每個測試表都是用隨機資料來填充的
如果在本機,也可以使用 –mysql-socket 指定 socket 檔案來連線。載入測試資料時長視資料量而定,若過程比較久需要稍加耐心等待。
真實測試場景中,資料表建議不低於 10個 ,單表資料量不低於 500萬行 ,當然了,要視伺服器硬體配置而定。如果是配備了SSD或者PCIE SSD這種高IOPS裝置的話,則建議單表資料量最少不低於 1億行 。
在上面初始化資料引數的基礎上,再增加一些引數,即可開始進行測試了:
./sysbench --mysql-host=127.0.0.1 --mysql-port=3306 \ --mysql-user=tpcc --mysql-password=tpcc \ --test=tests/db/oltp.lua --oltp_tables_count=10 \ --oltp-table-size=10000000 --num-threads=8 \ --oltp-read-only=off --report-interval=10 \ --rand-type=uniform --max-time=3600 \ --mysql-table-engine=myisam --max-requests=0 \ --percentile=99 run >> ./log/sysbench_oltpX_8_20140921.log
關於這幾個引數的解釋:
--num-threads=8 表示發起 8個併發連線 --oltp-read-only=off 表示不要進行只讀測試,也就是會採用讀寫混合模式測試 --report-interval=10 表示每10秒輸出一次測試進度報告 --rand-type=uniform 表示隨機型別為固定模式,其他幾個可選隨機模式:uniform(固定),gaussian(高斯),special(特定的),pareto(帕累託) --max-time=120 表示最大執行時長為 120秒 --max-requests=0 表示總請求數為 0,因為上面已經定義了總執行時長,所以總請求數可以設定為 0;也可以只設定總請求數,不設定最大執行時長 --percentile=99 表示設定取樣比例,預設是 95%,即丟棄1%的長請求,在剩餘的99%裡取最大值 --mysql-table-engine=myisam 表示測試的表儲存引擎型別為myisam
即:模擬 對10個表併發OLTP測試,每個表1000萬行記錄,持續壓測時間為 1小時。
真實測試場景中,建議持續壓測時長不小於 30分鐘 ,否則測試資料可能不具參考意義。
這裡需要注意的是,官方網站上的引數有一處有誤,即 --mysql-table-engine,官方網站上寫的是 --mysql-table-type,這個應該是沒有及時更新導致的。
另外,--mysql-table-engine引數還可以指定為 innodb 等 MySQL 支援的表儲存引擎型別。
測試結果解讀如下:
sysbench 0.5: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 8 Report intermediate results every 10 second(s) Random number generator seed is 0 and will be ignored Threads started! --每10秒鐘報告一次測試結果,tps、每秒讀、每秒寫、99%以上的響應時長統計 [10s] threads: 8, tps: 1111.51, reads/s: 15568.42, writes/s: 4446.13, response time: 9.95ms (99%) [20s] threads: 8, tps: 1121.90, reads/s: 15709.62, writes/s: 4487.80, response time: 9.78ms (99%) [30s] threads: 8, tps: 1120.00, reads/s: 15679.10, writes/s: 4480.20, response time: 9.84ms (99%) [40s] threads: 8, tps: 1114.20, reads/s: 15599.39, writes/s: 4456.30, response time: 9.90ms (99%) [50s] threads: 8, tps: 1114.00, reads/s: 15593.60, writes/s: 4456.70, response time: 9.84ms (99%) [60s] threads: 8, tps: 1119.30, reads/s: 15671.60, writes/s: 4476.50, response time: 9.99ms (99%) OLTP test statistics: queries performed: read: 938224 --讀總數 write: 268064 --寫總數 other: 134032 --其他操作總數(SELECT、INSERT、UPDATE、DELETE 之外的操作,例如COMMIT等) total: 1340320 --全部總數 transactions: 67016 (1116.83 per sec.) --總事務數(每秒事務數) deadlocks: 0 (0.00 per sec.) --發生死鎖總數 read/write requests: 1206288 (20103.01 per sec.)--讀寫總數(每秒讀寫次數) other operations: 134032 (2233.67 per sec.) --其他操作總數(每秒其他操作次數) General statistics: --一些統計結果 total time: 60.0053s --總耗時 total number of events: 67016 --共發生多少事務數 total time taken by event execution: 479.8171s --所有事務耗時相加(不考慮並行因素) response time: --響應時長統計 min: 4.27ms --最小耗時 avg: 7.16ms --平均耗時 max: 13.80ms --最長耗時 approx. 99 percentile: 9.88ms --超過99%平均耗時 Threads fairness: events (avg/stddev): 8377.0000/44.33 execution time (avg/stddev): 59.9771/0.00
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2929379/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux 檢視計算機各個硬體的效能: sysbench (多執行緒效能測試工具)Linux計算機執行緒
- 使用 Sysbench 進行 Linux 效能測試Linux
- three.js 中使用多執行緒以及效能測試JS執行緒
- pytest多程式/多執行緒執行測試用例執行緒
- MySQL 效能壓測工具-sysbench,從入門到自定義測試項MySql
- 多執行緒伺服器壓力測試執行緒伺服器
- 敲開阿里大門的執行緒、多執行緒和執行緒池面試專題阿里執行緒面試
- 使用委託開啟多執行緒(多執行緒深入)執行緒
- 通過sysbench工具實現MySQL資料庫的效能測試MySql資料庫
- 多執行緒面試題執行緒面試題
- python進階(15)多執行緒與多程式效率測試Python執行緒
- TestNg之XMl形式實現多執行緒測試XML執行緒
- ftp多執行緒下載工具FTP執行緒
- 多執行緒和多執行緒同步執行緒
- Java多執行緒面試高配問題---多執行緒(3)🧵Java執行緒面試
- 多執行緒--執行緒管理執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- C#多執行緒開發-執行緒同步 02C#執行緒
- C#多執行緒開發-執行緒池03C#執行緒
- Linux多執行緒面試題Linux執行緒面試題
- 多執行緒面試題1執行緒面試題
- threading多執行緒資源加鎖thread執行緒
- 資料庫基準測試工具 sysbench資料庫
- 資料庫效能測試:sysbench用法詳解資料庫
- 使用 ThreadPoolExecutor 建立多執行緒工具類thread執行緒
- 使用多執行緒提高rest服務效能執行緒REST
- 多執行緒引起的效能問題分析執行緒
- Java多執行緒-執行緒中止Java執行緒
- 多執行緒之初識執行緒執行緒
- C#多執行緒開發-執行緒基礎 01C#執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 多執行緒系列(1),多執行緒基礎執行緒
- sysbench 測試MySQLMySql
- 自動化測試應該如何實現多執行緒?執行緒
- 多執行緒經典面試題執行緒面試題
- 面試集錦(十四)多執行緒面試執行緒
- a、多執行緒執行緒