YCSB_對mongodb進行性能測試


1、YCSB介紹

YCSB,全稱為“Yahoo!Cloud Serving Benchmark”,是雅虎開發的用來對雲服務進行基礎測試的工具,其內部涵蓋了常見的NoSQL數據庫產品,如Cassandra、MongoDB、HBase、Redis等等。在運行YCSB的時候,可以配置不同的workload和DB,也可以指定線程數&並發數等其他參數。

2、安裝環境

基於參考文檔(https://github.com/brianfrankcooper/YCSB/tree/master/mongodb )安裝java,maven,ycsb 

注意,下面工具均需要根據linux系統類型和位數下載對應的rpm包,否則安裝不了。使用uname -m 可查看

2.1 安裝Java

下載地址:https://www.oracle.com/java/technologies/downloads

使用命令安裝rpm包

rpm -ivh 包名

 安裝后如果想卸載使用命令

yum remove java -y

2.2 安裝Maven

下載地址:https://maven.apache.org/download.cgi

解壓工具包

tar -zxvf apache-maven-3.8.4-bin.tar.gz

將解壓包的bin目錄路徑添加到環境變量並使修改文件立即生效

echo 'export PATH=$PATH:/root/apache-maven-3.8.4/bin' >> /etc/profile 

source /etc/profile

2.3 YCSB

下載地址:https://github.com/brianfrankcooper/YCSB/releases

解壓安裝包

tar -zxvf ycsb-0.5.0.tar.gz

到此,環境部署完成!

輸入命令簡單驗證下環境是否可用

./bin/ycsb load mongodb

正常情況顯示下圖內容

3、YCSB主要目錄說明

  • bin:目錄下有個可執行的ycsb文件,是用戶操作的命令行接口。ycsb主邏輯是:解析命令行、設置java環境,加載java-libs,封裝成可以執行的java命令,並執行。
  • workloads:目錄下有各種workload的模板,可以基於workload模板進行自定義修改。
    默認的6種測試場景如下:
    1)workloada:讀寫均衡型,50%/50%,Reads/Writes
    2)workloadb:讀多寫少型,95%/5%,Reads/Writes
    3)workloadc:只讀型,100%,Reads
    4)workloadd:讀最近寫入記錄型,95%/5%,Reads/insert
    5)workloade:掃描小區間型,95%/5%,scan/insert
    6)workloadf:讀寫入記錄均衡型,50%/50%,Reads/insert

4、YCSB主要參數說明

命令參數

假如處於ycsb工具目錄下,命令格式如下:

./bin/ycsb command database [options]
  • command:常用 load(用於壓測前的數據准備)和 run(執行壓測) 
  • database:壓測數據庫名稱
  • options:-P(指定workload文件)-p key=value(覆蓋workload中屬性)-threads (進程數)-s(執行過程中是否打印狀態信息)

workload屬性參數

  • recordcound:load階段加載到數據庫的紀錄條數 (default: 0) ,run階段操作的數據范圍(注:run階段該值不能大於load階段的值,否則會出現 Nothing updated for key的錯誤,該錯誤會影響update操作的正確性)
  • operationcount:run階段執行的操作總數
  • readallfields:查詢時是否讀取所有字段true或者讀取一個字段false(default: true)
  • fieldcount: 每條記錄的字段個數 (default: 10)
  • fieldlength: 每個字段的數據長度 (default: 100)
  • readproportion: 讀操作比例 (default: 0.95)
  • updateproportion: 更新操作比例 (default: 0.05)
  • insertproportion: 插入操作比例 (default: 0)
  • insertstart:第一個插入值的偏移量(default: 0)
  • scanproportion: 掃描作業比例 (default: 0)
  • readmodifywriteproportion: 讀取一條記錄修改它並寫回的比例 (default: 0)
  • requestdistribution: 請求的分布規則 uniform, zipfian or latest (default: uniform)
  • mongodb.url:待測試mongo實例的連接地址
  • mongodb.database:測試時使用的數據庫名稱(default: ycsb)注:該參數在實際使用過程為生效,但也不報錯,版本原因?
  • table: 測試表的名稱 (default: usertable)

5、壓測過程

5.1 加載數據

./bin/ycsb load mongodb -s -P ./workloads/workloada -threads 100 -p insertstart=0 -p recordcount=1000000 -p readproportion=0 -p updateproportion=0 -p insertproportion=1 -p fieldcount=5 -p fieldlength=2048 -p requestdistribution=uniform -p mongodb.url=mongodb://mongouser:autotest@192.168.0.230:27017/admin -p mongodb.database=ycsb_test -p table=t1 > ./load_result.txt

上面命令是加載100W條數據,每條數據5個字段,數據長度2048。加載完后數據大小大約10GB,耗時5分鍾,可以在 load_result.txt文件查看執行結果,主要用來查看執行失敗時的錯誤。

 正常執行的結果如下:

5.2 執行測試

./bin/ycsb run mongodb -s -P ./workloads/workloada -threads 100 -p recordcount=1000000 -p operationcount=1000000 -p insertstart=0 -p insertcount=0 -p readproportion=0.95 -p updateproportion=0.05 -p insertproportion=0 -p fieldcount=5 -p fieldlength=2048 -p mongodb.url=mongodb://mongouser:autotest123@192.168.0.230:27017/admin -p table=t1 > ./run_result.txt

上面命令:

  • recordcount=1000000:表示操作加載的100W條數據(該值必須小於等於加載的記錄數,否則會影響update操作的准確性)
  • operationcount=1000000:表示讀寫共執行100W次(可以隨意填寫,可用來控制壓測時間
  • insertcount=0,readproportion=0.95,updateproportion=0.05:表示插入數據占比0,讀占比95%,更新占比5%

 執行結果

結果字段說明:

  • RunTime(ms):數據加載所用時間,單位毫秒(ms)
  • Throughput(ops/sec):吞吐量,即ops(每秒操作次數)
  • Operations:操作的總次數
  • AverageLatency(us):平均響應延時,單位是微秒(us)
  • MinLatency(us):最小響應時間,單位是微秒(us)
  • MaxLatency(us):最大響應時間,單位是微秒(us)
  • 95thPercentileLatency(us):95%的操作延時,單位是微秒(us)
  • 99thPercentileLatency(us):99%的操作延時,單位是微秒(us)
  • Return=OK:成功返回數,這個值不符合測試要求,則證明測試失敗.
  • [READ]開頭的代表只讀的操作記錄,其他還有例如上面的[insert],[UPDATE]等,其他可以理解的就是字面意思,不能理解也不需要太過關注.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM