使用YCSB测试MongoDB的微分片性能(2)

* 解压缩   
* 进入到ycsb目录并运行(本地要有一个Mongo数据库在 27017端口上):   
./bin/ycsb run mongodb -P workloads/workloada
* 如果YCSB可以运行则表明安装成功
你也可以用Git把源文件拉下来自己编译。需要JDK和Maven工具。Github地址是:https://github.com/achille/YCSB 可以参考这个页面进行编译安装YCSB: https://github.com/achille/YCSB/tree/master/mongodb

YCSB场景文件

使用YCSB测试不同场景只需要提供不同的场景文件就可以。YCSB会按照你的场景文件的属性而自动生成响应的客户端请求。在我们这次测试里我们会使用到几种场景:
场景S1: 100%插入。用来加载测试数据 
场景S2: 写多读少 90% 更新 10%读   
场景S3: 混合读写 65%读, 25% 插入, 10% 更新   
场景S4: 读多写少 90% 读, 10% 插入、更新   
场景S5: 100%读

如下是其中场景文件S2的内容:
recordcount=5000000 
operationcount=100000000   
workload=com.yahoo.ycsb.workloads.CoreWorkload
readallfields=true
readproportion=0.1 
updateproportion=0.9   
scanproportion=0   
insertproportion=0
requestdistribution=uniform
insertorder=hashed
fieldlength=250 
fieldcount=8
mongodb.url=mongodb://192.168.1.2:27017 
mongodb.writeConcern=acknowledged   
threadcount=32

一些说明:
* 测试数据包括500万个文档(recordcount) 
* 每个文档大小大约2KB(fieldlength x fieldcount)。数据总共大小是10G+600M的索引   
* MongoDB数据库的url是192.168.1.2:27017   
* MongoDB的写安全设置(mongodb.writeConcern)是acknowledged   
* 线程数是32(threadcount)   
* 插入文档的顺序:哈希/随机 (insertorder)   
* 更新操作: 90% (0.9)   
* 读操作: 10% (0.1)

下载所有场景文件(S1 – S5)(见上面的Linux公社下载地址) 并解压到上面创建的ycsb目录下面:

MongoDB配置

本次测试是在AWS的虚拟主机上进行测试的。以下是服务器配置情况:
* OS: Amazon Linux (和CentOS基本类似) 
* CPU: 8 vCPU   
* RAM: 30G   
* Storage: 160G SSD   
* Journal: 25G EBS with 1000 PIOPS   
* Log: 10G EBS with 250 IOPS   
*   
* MongoDB: 2.6.0   
* Readahead:32

几点说明: 
MongoDB的数据,恢复日志(journal)以及系统日志(log)分别用了3个不同的存储盘。这是一个常见的优化方式,以保证写日志的操作不会影响到数据的刷盘IO。另外服务器的readahead设置改到了推荐的32。关于readahead等可以参见:

单机基准测试

在我们测试使用微分片性能之前我们首先需要得出单机的最高性能。启动目标MongoDB服务器,登录上去后先删除ycsb数据库(如果已经存在)
# mongo
> use ycsb   
> db.dropDatabase()

场景S1: 数据插入
接下来开始运行YCSB。进到ycsb目录下,运行以下命令(确认当前目录下已经有场景文件S1, S2, S3, S4,S5)
./bin/ycsb load mongodb -P S1 -s

如果运行正常,你会看到每隔10秒YCSB打印一下当前状态,包括每秒的并发率以及平均响应时间。 如:
Loading workload… 
Starting test.   
0 sec: 0 operations;   
mongo connection created with localhost:27017/ycsb   
10 sec: 67169 operations; 7002.16 current ops/sec; [INSERT AverageLatency(us)=4546.87]   
20 sec: 151295 operations; 7909.24 current ops/sec; [INSERT AverageLatency(us)=3920.9]   
30 sec: 223663 operations; 7235.35 current ops/sec; [INSERT AverageLatency(us)=4422.63]

在运行的同时你可以用mongostat(或者更好的选择:MMS)来监控MongoDB的实时指标,看是否和YCSB的报告大体一致。

运行结束后可以看到类似于如下输出:
[OVERALL], RunTime(ms), 687134.0 
[OVERALL], Throughput(ops/sec), 7295.168457372555   
…   
[INSERT], Operations, 5000000   
[INSERT], AverageLatency(us), 4509.1105768   
[INSERT], MinLatency(us), 126   
[INSERT], MaxLatency(us), 3738063   
[INSERT], 95thPercentileLatency(ms), 10   
[INSERT], 99thPercentileLatency(ms), 37   
[INSERT], Return=0, 5000000   

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/41a993cf2b0dbb9b48c114ca48cfbd3a.html