成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用ycsb對mongodb做性能測試

ChristmasBoy / 2195人閱讀

摘要:命令壓測完后數(shù)據(jù)庫大小是壓測報(bào)告二八原則壓測寫入億條每條日志大小,個(gè)字段,字段長度為。表數(shù)據(jù)大小,表存儲(chǔ)大小,一秒。索引掃描結(jié)論日志查詢效率隨著記錄條目增加,掃描效率會(huì)下降。按秒響應(yīng)結(jié)果為目標(biāo),掃描條目應(yīng)控制在條以內(nèi)。

我的專欄地址:我的segmentfault,歡迎瀏覽 一、ycsb壓測工具 1.1ycsb workload

ycsb的workloads目錄下保存了6種不同的workload類型,代表了不同的壓測負(fù)載類型,詳細(xì)的介紹列在下面:
workloada:混合了50%的讀和50%的寫;
workloadb:Read mostly workload,混合了95%的讀和5%的寫,該workload側(cè)重于測試集群的讀能力;
workloadc:Read only,100%只讀
workloadd:Read latest workload,插入數(shù)據(jù),接著就讀取這些新插入的數(shù)據(jù)
workloade:Short ranges,短范圍scan,不同于隨機(jī)讀,每個(gè)測試線程都會(huì)去scan一段數(shù)據(jù)
workloadf:Read-modiy-wirte,讀改寫,客戶端讀出一個(gè)記錄,修改它并將被修改的記錄返回

1.2workload配置文件字段說明
fieldcount: 每條記錄字段個(gè)數(shù) (default: 10)
fieldlength: 每個(gè)字段長度 (default: 100)
readallfields: 是否讀取所有字段true或者讀取一個(gè)字段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或者h(yuǎn)ashed (default: hashed)
operationcount: 執(zhí)行的操作數(shù).
maxexecutiontime: 執(zhí)行操作的最長時(shí)間,當(dāng)然如果沒有超過這個(gè)時(shí)間以運(yùn)行時(shí)間為主。
table: 測試表的名稱 (default: usertable)
recordcount: 加載到數(shù)據(jù)庫的紀(jì)錄條數(shù) (default: 0) 
1.3 BinData



BinData()的第一個(gè)參數(shù)是BSON二進(jìn)制子類型,如上所述,它是以下之一:

generic:  x00 (0)
function: x01 (1)
old:      x02 (2)
uuid_old: x03 (3)
uuid:     x04 (4)
md5:      x05 (5)
user:     x80 (128)
1.4ycsb操作命令
加載數(shù)據(jù):
./bin/ycsb load mongodb -P workloads/test_insert  > result_insert_10000.log

跑壓測:
./bin/ycsb run mongodb -P workloads/test_insert  > result_insert_10000.log
二、mongodb操作 2.1操作命令
清空表 db.col.remove({})

查詢一條記錄 db.usertable.find().limit(1)

刪庫: db.dropDatabase()

查看執(zhí)行效率:db.usertable.find({"_id":"user4520119406760868179"}).explain("executionStats")

查看索引 :db.usertable.getIndexes()

集合文檔數(shù):db.usertable.count()

恢復(fù)備份:mongorestore -h 127.0.0.1:27017 --gzip -db collectionName /path

集合記錄數(shù)列表: db.getCollectionNames().forEach((name) => {print(name+","+db[name].stats().count)})

集合按記錄條數(shù)排序: db.getCollectionNames().map((name) => db[name]).sort((a,b) => {return a.count()-b.count()}).forEach((db) => {print(db.getName()+","+db.count())})

查看執(zhí)行效率:db.log.find({"uid":"508076972", "time":{"$gt":ISODate("2019-01-17T00:01:11Z")}}).explain("queryPlanner")

查看io: iostat -xdm 1 10
三、壓測步驟 3.1 ycsb壓測

參考:http://lsr1991.github.io/2015/04/25/ycsb-document-translation-running-a-workload/
1、對mongo進(jìn)行 95%寫入 , 5%查詢的測試
2、對mongo進(jìn)行 100% scan的查詢的測試

結(jié)果:

3.1.1寫1億條日志,hashed寫入:

每條日志 大小1KB, 16個(gè)字段,字段長度為64。

top命令:


io:

壓測完后數(shù)據(jù)庫大小是 136GB:

ycsb            136.250GB

ycsb壓測報(bào)告:

[OVERALL], RunTime(ms), 2909439
[OVERALL], Throughput(ops/sec), 34370.88730851549
[TOTAL_GCS_PS_Scavenge], Count, 10132
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 14302
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.4915724302863886
[TOTAL_GCS_PS_MarkSweep], Count, 1
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 27
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 9.280139573299182E-4
[TOTAL_GCs], Count, 10133
[TOTAL_GC_TIME], Time(ms), 14329
[TOTAL_GC_TIME_%], Time(%), 0.4925004442437184
[CLEANUP], Operations, 100
[CLEANUP], AverageLatency(us), 1252.63
[CLEANUP], MinLatency(us), 1
[CLEANUP], MaxLatency(us), 125055
[CLEANUP], 95thPercentileLatency(us), 6
[CLEANUP], 99thPercentileLatency(us), 9
[INSERT], Operations, 100000000
[INSERT], AverageLatency(us), 2873.72475394
[INSERT], MinLatency(us), 141
[INSERT], MaxLatency(us), 169476095
[INSERT], 95thPercentileLatency(us), 8035
[INSERT], 99thPercentileLatency(us), 20767
[INSERT], Return=OK, 100000000
3.1.2二八原則壓測 mongo寫入1億條

每條日志 大小608B, 16個(gè)字段,字段長度為38B。

top:

io:

壓測完后庫的大小是82GB:

> show dbs
admin      0.000GB
config     0.000GB
local      0.000GB
ycsb_1yi   0.697GB
ycsb_28   82.100GB

ycsb壓測報(bào)告:

[OVERALL], RunTime(ms), 1732198
[OVERALL], Throughput(ops/sec), 57730.12092151128
[TOTAL_GCS_PS_Scavenge], Count, 8024
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 10927
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.6308170313093538
[TOTAL_GCS_PS_MarkSweep], Count, 2
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 42
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.002424665078703474
[TOTAL_GCs], Count, 8026
[TOTAL_GC_TIME], Time(ms), 10969
[TOTAL_GC_TIME_%], Time(%), 0.6332416963880572
[CLEANUP], Operations, 100
[CLEANUP], AverageLatency(us), 73.68
[CLEANUP], MinLatency(us), 1
[CLEANUP], MaxLatency(us), 7155
[CLEANUP], 95thPercentileLatency(us), 3
[CLEANUP], 99thPercentileLatency(us), 12
[INSERT], Operations, 100000000
[INSERT], AverageLatency(us), 1716.96953065
[INSERT], MinLatency(us), 141
[INSERT], MaxLatency(us), 20643839
[INSERT], 95thPercentileLatency(us), 6279
[INSERT], 99thPercentileLatency(us), 14743
3.1.1寫1億條日志,順序?qū)懭耄?/b>

top:

io:

壓測完后庫的大小是115GB:

test  173.805GB
admin                      0.000GB
config                     0.000GB
local                      0.000GB
ycsb_1yi                   0.697GB
ycsb_1yi_ordered         115.750GB
ycsb_insert_1w             0.012GB
ycsb_search               12.562GB

ycsb壓測報(bào)告:

[OVERALL], RunTime(ms), 1803374
[OVERALL], Throughput(ops/sec), 55451.61458466186
[TOTAL_GCS_PS_Scavenge], Count, 5738
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 8131
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.4508770781878856
[TOTAL_GCS_PS_MarkSweep], Count, 1
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 27
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0014971935937858703
[TOTAL_GCs], Count, 5739
[TOTAL_GC_TIME], Time(ms), 8158
[TOTAL_GC_TIME_%], Time(%), 0.4523742717816715
[CLEANUP], Operations, 100
[CLEANUP], AverageLatency(us), 54.86
[CLEANUP], MinLatency(us), 0
[CLEANUP], MaxLatency(us), 5343
[CLEANUP], 95thPercentileLatency(us), 7
[CLEANUP], 99thPercentileLatency(us), 19
[INSERT], Operations, 100000000
[INSERT], AverageLatency(us), 1796.96847349
[INSERT], MinLatency(us), 147
[INSERT], MaxLatency(us), 8028159
[INSERT], 95thPercentileLatency(us), 1518
[INSERT], 99thPercentileLatency(us), 3451
[INSERT], Return=OK, 100000000
插入性能總結(jié):
規(guī)格 文檔大小 count操作記錄數(shù) _id值 threads壓測端線程數(shù) throughput(per second)吞吐 RAL(us)讀延時(shí)** WAL(us)寫延時(shí)**
16核32G 大小1KB, 16個(gè)字段,字段長度為64 1億 hashed 100 34370 - 2873
16核32G 大小608B, 16個(gè)字段,字段長度為38B 1億 hashed 100 57730 - 1716
16核32G 大小1KB, 27個(gè)字段,字段長度為38B 1億 ordered 100 55451 - 1796

可與阿里云版mongodb性能進(jìn)行對比:阿里云mongodb性能測試結(jié)果頁面

3.2 場景測試 執(zhí)行命令:

db.usertable.find({"field1":"joe"}).explain("executionStats")
db.usertable.find({"field1":"joe","field2":"jack"}).explain("executionStats")

測試數(shù)據(jù)查詢:
場景1:1千萬條成1KB, 掃表時(shí)間250秒, 一秒掃4W條。mongo庫 12GB,一秒49MB。({"field1":"joe"})
場景2:1千萬條成1KB, 掃表時(shí)間322秒。(({"field1":"joe","field2":"jack"})
場景3:1億條成600B, 掃表時(shí)間1800秒, 一秒掃5.5W條。mongo庫 82GB,一秒46.7MB。({"field1":"joe"})
生產(chǎn)數(shù)據(jù)查詢: 全表掃描簡單條件:
場景1掃描字段({"uid":"508076972"}):233393233(2.3億)條,每條547B, 掃表時(shí)間518秒, 一秒掃450566條。表存儲(chǔ)大小56GB,一秒108MB。
場景2掃描字段({"eid":"508076972"}):233393233(2.3億)條,每條547B, 掃表時(shí)間564秒, 一秒掃413817條。表存儲(chǔ)大小56GB,一秒99MB。
場景3掃描字段({"eid":"508076972"}):119963485(1.2億)條,每條532B, 掃表時(shí)間290秒, 一秒掃413667條。表存儲(chǔ)大小25GB,一秒87MB。
場景4掃描字段({"eid":"508076972"}):10144088(1千萬)條,每條536B, 掃表時(shí)間28秒, 一秒掃362288條。表數(shù)據(jù)大小5GB,表存儲(chǔ)大小2.5GB,一秒91MB。
場景5掃描字段({"uid":"508076972"}):10144088(1千萬)條,每條536B, 掃表時(shí)間45秒, 一秒掃225424條。表數(shù)據(jù)大小5GB,表存儲(chǔ)大小2.5GB,一秒56MB。

場景4和5有點(diǎn)奇怪,索引字段的效率還不如非索引字段。通過驗(yàn)證,發(fā)現(xiàn)是索引字段第一次查詢在建立緩存,場景5后續(xù)的查詢都在5秒左右完成。

全表掃描復(fù)合條件:
場景1掃描字段({"eid":"32435346465ddf4","gamechannel":"1010031002"}):233393233(2.3億)條,每條547B, 掃表時(shí)間562秒, 一秒掃415290條。表存儲(chǔ)大小56GB,一秒100MB。
場景2掃描字段({"uid":"508076972","eid":"32435346465ddf4"}):233393233(2.3億)條,每條547B, 掃表時(shí)間534秒, 一秒掃437065條。表存儲(chǔ)大小56GB,一秒105MB。
場景2掃描字段({"uid":"508076972","time":"32435346465ddf4"}):秒出結(jié)果。
全表掃描結(jié)論

日志查詢效率: 40W記錄/秒, 90MB/秒。 (單字段一次全表掃描,如果復(fù)合條件查詢加上相應(yīng)掃描時(shí)間)

索引掃描 time + 非uid:
場景1掃描字段({ "time":{"$gt":ISODate("2019-01-17T00:01:11Z"), "$lt":ISODate("2019-01-18T00:01:11Z")}}):16537187(1千萬)條,每條547B, 掃表時(shí)間23秒, 一秒掃719008條。
場景2掃描字段({ "time":{"$gt":ISODate("2019-01-19T00:01:11Z"), "$lt":ISODate("2019-01-20T00:01:11Z")}}):17110050(1千萬)條,每條547B, 掃表時(shí)間27秒, 一秒掃633705條。
場景3掃描字段({ "time":{"$gt":ISODate("2019-01-19T00:01:11Z"), "$lt":ISODate("2019-01-19T12:01:11Z")}}):11050895(1千萬)條,每條547B, 掃表時(shí)間13秒, 一秒掃850068條。
場景4掃描字段({ "eid":"508076972","time":{"$gt":ISODate("2019-01-17T00:01:11Z"), "$lt":ISODate("2019-01-18T00:01:11Z")}}):16537187(1千萬)條,每條547B, 掃表時(shí)間26秒, 一秒掃636045條。
場景5掃描字段({ "time":{"$gt":ISODate("2019-01-19T00:01:11Z"), "$lt":ISODate("2019-01-19T10:01:11Z")}}):9423255(1千萬)條,每條547B, 掃表時(shí)間10秒, 一秒掃9423255條。
場景6掃描字段({ "time":{"$gt":ISODate("2019-01-17T00:01:11Z"), "$lt":ISODate("2019-01-19T00:01:11Z")}}):32972256(3千萬)條,每條547B, 掃表時(shí)間86秒, 一秒掃383398條。
場景7掃描字段({ "time":{"$gt":ISODate("2019-01-17T00:01:11Z"), "$lt":ISODate("2019-01-20T00:01:11Z")}}):50082445(5千萬)條,每條547B, 掃表時(shí)間95秒, 一秒掃527183條。
場景8掃描字段({"eid":"508076972", "time":{"$gt":ISODate("2019-01-17T00:01:11Z"), "$lt":ISODate("2019-01-18T00:01:11Z")}}):3586078(3百萬)條,每條547B, 掃表時(shí)間5秒, 一秒掃717215條。
場景9掃描字段({"eid":"508076972", "time":{"$gt":ISODate("2019-01-18T00:01:11Z"), "$lt":ISODate("2019-01-19T00:01:11Z")}}):4250364(4百萬)條,每條547B, 掃表時(shí)間7秒, 一秒掃607194條。
索引掃描結(jié)論

日志查詢效率: 隨著記錄條目增加,掃描效率會(huì)下降。 按10秒響應(yīng)結(jié)果為目標(biāo),掃描條目應(yīng)控制在 1000W條以內(nèi)。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77438.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<