這幾天對所有的基礎(chǔ)組件做一個摸底的基準壓力測試,目前我們所有的開源基礎(chǔ)組件都沒有做過性能測試,經(jīng)常有開發(fā)人員問,我們的RDS、MongoDB集群能抗多大量呀,這個時候我是沒辦法回復(fù)的,因為我自己也不知道,雖然一個數(shù)據(jù)庫集群能抗多大量,在軟件、硬件配置固定的情況下,和業(yè)務(wù)場景有很大的關(guān)系,如果數(shù)據(jù)量小,查詢SQL簡單那吞吐量自然很高,如果數(shù)據(jù)量特別大并且都是復(fù)雜SQL,那吞吐量自然上不去;但是既然人家問了,肯定是希望有一個答案,如果你說不知道,那會給人一種不靠譜的感覺,所以做一次基準壓力測試,我們知道在特定的場景下我們的集群能有多大的吞吐量,做到自己心里有數(shù),才給別人信心。這周在壓測MongoDB,谷歌了一番,MongoDB的壓測工具很少,有幾篇是介紹通過YCSB壓測MongoDB的,找丹姐(邏輯思維首席DBA)推薦一款MongoDB的壓測工具,丹姐也推薦YCSB,好吧,那就它吧,開整。
成都創(chuàng)新互聯(lián)公司主要為客戶提供服務(wù)項目涵蓋了網(wǎng)頁視覺設(shè)計、VI標志設(shè)計、營銷型網(wǎng)站建設(shè)、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式成都網(wǎng)站建設(shè)、手機網(wǎng)站制作、微商城、網(wǎng)站托管及成都網(wǎng)站維護、WEB系統(tǒng)開發(fā)、域名注冊、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計、SEO優(yōu)化排名。設(shè)計、前端、后端三個建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標準。已經(jīng)為玻璃隔斷行業(yè)客戶提供了網(wǎng)站建設(shè)服務(wù)。4.0.4-62-g7e345a7
4、系統(tǒng)及內(nèi)核版本
CentOS Linux release 7.5.1804 (Core)
3.10.0-862.14.4.el7.x86_64
YCSB-0.16.0-RC1.
https://github.com/brianfrankcooper/YCSB/tree/master/mongodb
wget https://github.com/brianfrankcooper/YCSB/archive/0.16.0-RC1.tar.gz
tar -zxvf YCSB-0.16.0-RC1.tar.gz
cd YCSB-0.16.0-RC1/
mvn clean package -Dmaven.test.skip=true
PS:
安裝過程中maven下載依賴需要×××,如果有安裝失敗的包,需要在能×××的服務(wù)器上下載手動安裝,比如mongodb-async-driver-2.0.1.jar就需要×××,下面是手動安裝方法
A、手動下載jar包wget http://www.allanbank.com/repo/com/allanbank/mongodb-async-driver/2.0.1/mongodb-async-driver-2.0.1.jar
B、加壓包,從pom.xml 文件里面查看groupId、artifactId、version
C、手動安裝
mvn install:install-file -Dfile=/tmp/mongodb-async-driver-2.0.1.jar -DgroupId=com.allanbank -DartifactId=mongodb-async-driver -Dversion=2.0.1 -Dpackaging=jar
mvn -pl com.yahoo.ycsb:mongodb-binding -am clean package
在workloads目錄下有很多壓測文件用到的文件,我們從其中一個copy一份,編輯添加我們自己定義的內(nèi)容
vim workloads/2000w
ongodb.url=mongodb://root:123456@172.21.244.101:27000
mongodb.writeConcern=normal
table=chj_2000w
recordcount=20000000
operationcount=50000000
readallfields=true
readproportion=0
updateproportion=0
scanproportion=0
insertproportion=1
requestdistribution=zipfian
workload=com.yahoo.ycsb.workloads.CoreWorkload
關(guān)于YCSB的壓測文件的每個參數(shù)的解釋如下:
fieldcount: 每條記錄字段個數(shù) (default: 10)
fieldlength: 每個字段長度 (default: 100)
readallfields: 是否讀取所有字段true或者讀取一個字段false (default: true)
readproportion: 讀取作業(yè)比例 (default: 0.95)
updateproportion: 更新作業(yè)比例 (default: 0.05)
insertproportion: 插入作業(yè)比例 (default: 0)
scanproportion: 掃描作業(yè)比例 (default: 0)
readmodifywriteproportion: 讀取一條記錄修改它并寫回的比例 (default: 0)
requestdistribution: 請求的分布規(guī)則 uniform, zipfian or latest (default: uniform)
maxscanlength: 掃描作業(yè)大記錄數(shù) (default: 1000)
scanlengthdistribution: 在1和大掃描記錄數(shù)的之間的分布規(guī)則 (default: uniform)
insertorder: 記錄被插入的規(guī)則ordered或者hashed (default: hashed)
operationcount: 執(zhí)行的操作數(shù).
maxexecutiontime: 執(zhí)行操作的最長時間,當然如果沒有超過這個時間以運行時間為主。
table: 測試表的名稱 (default: usertable)
recordcount: 加載到數(shù)據(jù)庫的紀錄條數(shù) (default: 0)
./bin/ycsb load mongodb -threads 100 -P workloads/2000w
輸出結(jié)果說明
[OVERALL], RunTime(ms), 37182 #數(shù)據(jù)加載所用時間(毫秒)
[OVERALL], Throughput(ops/sec), 13447.367005540314 #加載操作的吞吐量(ops/sec)
[TOTAL_GCS_PS_Scavenge], Count, 37
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 146
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.3926631165617772
[TOTAL_GCS_PS_MarkSweep], Count, 0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 37
[TOTAL_GC_TIME], Time(ms), 146
[TOTAL_GC_TIME_%], Time(%), 0.3926631165617772
[CLEANUP], Operations, 64
[CLEANUP], AverageLatency(us), 422.09375
[CLEANUP], MinLatency(us), 0
[CLEANUP], MaxLatency(us), 26911
[CLEANUP], 95thPercentileLatency(us), 3
[CLEANUP], 99thPercentileLatency(us), 30
[INSERT], Operations, 500000 # 執(zhí)行insert操作的總數(shù)
[INSERT], AverageLatency(us), 4658.931652 # 每次insert操作的平均延時(微秒)
[INSERT], MinLatency(us), 831 # 所有insert操作的最小延時(微秒)
[INSERT], MaxLatency(us), 1784831 # 所有insert操作的大延時(微秒)
[INSERT], 95thPercentileLatency(us), 9711 # 95%的insert操作延時在9毫秒以內(nèi)
[INSERT], 99thPercentileLatency(us), 17903 # 99%的insert操作延時在17毫秒以內(nèi)
[INSERT], Return=OK, 500000
通過調(diào)整壓測文件中read和update的比例,模擬只讀和讀寫混合的操作
./bin/ycsb run mongodb -threads 100 -P workloads/2000w
[OVERALL], RunTime(ms), 1735408
[OVERALL], Throughput(ops/sec), 2881.1668495247227
[TOTAL_GCS_PS_Scavenge], Count, 3975
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 6180
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.3561122226012557
[TOTAL_GCS_PS_MarkSweep], Count, 0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 3975
[TOTAL_GC_TIME], Time(ms), 6180
[TOTAL_GC_TIME_%], Time(%), 0.3561122226012557
[READ], Operations, 500346
[READ], AverageLatency(us), 2851.9638989819045
[READ], MinLatency(us), 696
[READ], MaxLatency(us), 646655
[READ], 95thPercentileLatency(us), 6991
[READ], 99thPercentileLatency(us), 23103
[READ], Return=OK, 500346
[CLEANUP], Operations, 10
[CLEANUP], AverageLatency(us), 3131.0
[CLEANUP], MinLatency(us), 1
[CLEANUP], MaxLatency(us), 31295
[CLEANUP], 95thPercentileLatency(us), 31295
[CLEANUP], 99thPercentileLatency(us), 31295
[UPDATE], Operations, 4499654
[UPDATE], AverageLatency(us), 3534.2083122391186
[UPDATE], MinLatency(us), 704
[UPDATE], MaxLatency(us), 1078271
[UPDATE], 95thPercentileLatency(us), 11647
[UPDATE], 99thPercentileLatency(us), 27343
[UPDATE], Return=OK, 4499654
1、服務(wù)器指標,主要觀察CPU、內(nèi)存、磁盤IO的利用率和延時,可以通過top、iostat工具查看實時情況
2、MongoDB可以通過mongostat 工具查看實時情況
mongostat的輸出說明
inserts:每秒插入次數(shù)
query:每秒查詢次數(shù)
update:每秒更新次數(shù)
delete:每秒刪除次數(shù)
getmore:每秒執(zhí)行g(shù)etmore次數(shù)
command:每秒的命令數(shù),比以上插入、查找、更新、刪除的綜合還多,還統(tǒng)計了別的命令
dirty:WiredTiger存儲引擎中dirty 數(shù)據(jù)占緩存百分比
used:WiredTiger存儲引擎中引擎使用緩存占百分比
flushs:每秒執(zhí)行fsync將數(shù)據(jù)寫入硬盤的次數(shù)。
vsize:虛擬內(nèi)存使用量,單位MB
res:物理內(nèi)存使用量,單位MB
qrw:客戶端等待讀的長度,隊列中的長度
arw:客戶端等待寫的隊列長度
netIn 和 netOut:網(wǎng)絡(luò)流量,單位是字節(jié) byte
conn:當前連接數(shù)
time:時間戳
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。