一、工具介紹 YCSB 於 2010 年開源,YCSB是雅虎開源的NoSQL測試工具,通常用來對noSQL資料庫進行性能,註意此工具僅支持varchar和text類型,且列的長度可以增加,預設是10列,可以根據自己的需要增加列長。運行一個壓力測試需要 6 步: 配置需要測試的資料庫 選擇合適的資料庫 ...
一、工具介紹
YCSB 於 2010 年開源,YCSB是雅虎開源的NoSQL測試工具,通常用來對noSQL資料庫進行性能,註意此工具僅支持varchar和text類型,且列的長度可以增加,預設是10列,可以根據自己的需要增加列長。運行一個壓力測試需要 6 步:
- 配置需要測試的資料庫
- 選擇合適的資料庫介面層
- 選擇合適的 workload
- 選擇合適的運行時參數
- 裝載數據(loading phase) (ycsb主要就是這2步驟)
- 運行測試(transaction phase)
二、工具使用
1、下載
curl -O --location https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz tar xfvz ycsb-0.17.0.tar.gz cd ycsb-0.17.0
2、修改配置
(1)進入ycsb-0.17.0/jdbc-binding/conf 修改db.properties
db.driver=com.mysql.jdbc.Driver # jdbc.fetchsize=20 db.url=jdbc:mysql://192.168.30.128:33306/ycsb?useSSL=false&autoReconnect=true&characterEncoding=utf8 db.user=root db.passwd=123456
(2)進入ycsb-0.17.0/jdbc-binding/lib,下載mysql-connector-java-5.1.46.jar並放入lib目錄下
3、創建測試的庫與表
create database ycsb; use ycsb; #必須是這個表結構,負責插入數據將報錯,可以將text改為varchar類型 CREATE TABLE usertable ( YCSB_KEY VARCHAR(255) PRIMARY KEY, FIELD0 TEXT, FIELD1 TEXT, FIELD2 TEXT, FIELD3 TEXT, FIELD4 TEXT, FIELD5 TEXT, FIELD6 TEXT, FIELD7 TEXT, FIELD8 TEXT, FIELD9 TEXT );
#或者是如下的表結構
CREATE TABLE usertable (
YCSB_KEY VARCHAR(255) PRIMARY KEY,
FIELD0 VARCHAR(255), FIELD1 VARCHAR(255),
FIELD2 VARCHAR(255), FIELD3 VARCHAR(255),
FIELD4 VARCHAR(255), FIELD5 VARCHAR(255),
FIELD6 VARCHAR(255), FIELD7 VARCHAR(255),
FIELD8 text, FIELD9 text
);
4、數據寫入
cd ycsb-0.17.0 #進入此目錄下,然後執行load命令
./bin/ycsb load jdbc -s -P workloads/workloadd -P /syw_test/ycsb-0.17.0/jdbc-binding/conf/db.properties -cp /syw_test/ycsb-0.17.0/jdbc-binding/lib/mysql-connector-java-5.1.46.jar -p recordcount=1000 -p threads=5 -p operationcount=1000 -p table=usertable
options選項: -P file :指定workload文件,相對路徑或者絕對路徑。 -cp path :指定額外的Java classpath。 -jvm-args args :指定額外的JVM參數。 -p key=value :設置ycsb配置項,會覆蓋workload文件的配置項。 -s :運行時的中間狀態列印到stderr中。 -target n :表示1s中總共的操作次數。 -threads n :設置ycsb client的併發測試線程數,預設是1,單線程。
5、執行測試
載入好數據之後,即可執行工作負載
#將load改為run即可
./bin/ycsb run jdbc -s -P workloads/workloadd -P /syw_test/ycsb-0.17.0/jdbc-binding/conf/db.properties -cp /syw_test/ycsb-0.17.0/jdbc-binding/lib/mysql-connector-java-5.1.46.jar -p recordcount=1000 -p threads=5 -p operationcount=1000 -p table=usertable
三、YCSB測試參數解析
(1)workloads目錄裡面下包含自帶了6種壓力測試場景:
workloada:讀寫均衡型,50%/50%,Reads/Writes workloadb:讀多寫少型,95%/5%,Reads/Writes workloadc:只讀型,100%,Reads workloadd:讀最近寫入記錄型,95%/5%,Reads/insert workloade:掃描小區間型,95%/5%,scan/insert workloadf:讀寫入記錄均衡型,50%/50%,Reads/insert
(2)workload參數介紹
參數 |
含義 |
recordcount=1000
|
YCSB load(載入元數據)命令的參數,預設值1000表示預設載入的記錄條數,可以在命令行顯示修改該值。 |
operationcount=1000
|
YCSB run(運行壓力測試)命令的參數,預設值1000表示預設選取資料庫中的1000條數據進行壓力測試。對於workloada這種測試場景,就意味著讀數據在500左右,寫數據也在500左右。 |
workload=com.yahoo.ycsb.workloads.CoreWorkload
|
指定了workload的實現類為 com.yahoo.ycsb.workloads.CoreWorkload |
readallfields=true |
表示查詢時是否讀取記錄的所有欄位 |
readproportion=0.5 |
表示讀操作的比例,該場景為0.5 |
updateproportion=0.5 |
表示更新操作的比例,該場景為0.5 |
scanproportion=0 |
表示掃描操作的比例 |
insertproportion=0 |
表示插入操作的比例 |
requestdistribution=zipfian
|
表示請求的分佈模式,YCSB提供uniform, zipfian, latest三種分佈模式, Uniform(等概率隨機選擇記錄)、Zipfian(隨機選擇記錄,存在熱紀錄)和Latest(近期寫入的記錄是熱記錄) |
四、測試結果的解讀
[OVERALL], RunTime(ms), 8001 #運行總時間(毫秒) 【測試指標】 [OVERALL], Throughput(ops/sec), 124.9843769528809 #吞吐量,每秒操作數 【測試指標】 [TOTAL_GCS_G1_Young_Generation], Count, 1 [TOTAL_GC_TIME_G1_Young_Generation], Time(ms), 152 [TOTAL_GC_TIME_%_G1_Young_Generation], Time(%), 1.8997625296837894 [TOTAL_GCS_G1_Old_Generation], Count, 0 [TOTAL_GC_TIME_G1_Old_Generation], Time(ms), 0 [TOTAL_GC_TIME_%_G1_Old_Generation], Time(%), 0.0 [TOTAL_GCs], Count, 1 #全局GC次數 [TOTAL_GC_TIME], Time(ms), 152 #全局GC時間 [TOTAL_GC_TIME_%], Time(%), 1.8997625296837894 #全局GC時間百分比 [READ], Operations, 954 #讀總操作數 [READ], AverageLatency(us), 3428.7201257861634 #平均延遲(微秒) [READ], MinLatency(us), 1889 #最小延遲(微秒) [READ], MaxLatency(us), 163071 #最大延遲(微秒) [READ], 95thPercentileLatency(us), 5395 #95%的樣本延遲低於該值 【測試指標】 [READ], 99thPercentileLatency(us), 10007 #99%的樣本延遲低於該值 [READ], Return=OK, 954 [CLEANUP], Operations, 1 [CLEANUP], AverageLatency(us), 9964.0 [CLEANUP], MinLatency(us), 9960 [CLEANUP], MaxLatency(us), 9967 [CLEANUP], 95thPercentileLatency(us), 9967 [CLEANUP], 99thPercentileLatency(us), 9967 [INSERT], Operations, 46 #寫入總操作數 [INSERT], AverageLatency(us), 11757.478260869566 [INSERT], MinLatency(us), 6932 [INSERT], MaxLatency(us), 36159 [INSERT], 95thPercentileLatency(us), 19951 [INSERT], 99thPercentileLatency(us), 36159 [INSERT], Return=OK, 46
五、測試指標
運行時間、吞吐量、時延
1.作者:Syw 2.出處:http://www.cnblogs.com/syw20170419/ 3.本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 4.如果文中有什麼錯誤,歡迎指出。以免更多的人被誤導。 |