我们做数据库的benchmark主要是想了解数据库在某一个配置下性能究竟怎样,最近在k8s中压测了一下mongodb的性能,因为所做内容都是在公司的业务上,所以测试的代码就不放了。本文的总结是梳理一下YCSB这个测试工具对mongodb的压测。其实在k8s上操作和裸机操作原理都是一样的,只是k8s上操作比裸机部署的操作相当于“加了个壳”,你可以把YCSB封装成docker镜像,通过job来完成你的压测部署。
测试选取YCSB(Yahoo! Cloud System Benchmark)作为测试客户端工具。YCSB是Yahoo开源的一个nosql测试工具,用来测试比较各种nosql的性能,项目地址:https://github.com/brianfrankcooper/YCSB。项目的mongodb目录下有详细的安装和测试方法。
YCSB支持常见的nosql数据库读写,如插入,修改,删除,读取等。它可以使用多线程来提高客户端的性能。可以方便的自定义各种场景,如95%插入5%读,或者90%读5%更新5%插入等等。可以自定义数据请求分布方式:平均分布,zipfian(大约20%数据获得80%访问请求),最新数据。
1. 选择客户端线程数。使用YCSB测试,要选择一个合适的线程数,否则测试的瓶颈可能在客户端而不是数据库,经过比较,大概100个线程时,YCSB达到最大性能。
2.定义测试场景。本次测试的场景如下:
workloada | 写多读少,90%插入,5%读,5%更新。 |
workloadb | 读多写少,95%读,5%更新。 |
workloadc | 读多写少,100%读。 |
workloadd | 读多写少,95%读,5%插入。 |
workloadf | 读多写少,50%读,50%读写修改同一条记录。 |
workloadg | 读多写少,60%读,20%读,20%更新。 |
3.测试不同数量记录下的各种场景。分成两个阶段:
1),load。加载数据。命令为:
./bin/ycsb load mongodb -threads 100 -s -P workloads/workloada -p mongodb.url=mongodb://mongos:28000/ycsb?w=0 > outputLoad.txt
执行load 命令时,仅有recordcount参数起作用,如recordcount=60000000表示加载六千万条记录。执行run命令时,recordcount不起作用。mongos是集群中mongos实例的ip地址。
2),run。load数据完成后,各种场景运行测试。
测试场景workloada,位于workloads目录下:
./bin/ycsb run mongodb -threads 100 -s -P workloads/workloada -p mongodb.url=mongodb://mongos:28000/ycsb?w=0 > outputRun.txt
每次load数据前要把上次测试中产生的数据删除,包括各个分片,配置服务器,mongos等的数据。
补充说明:workload配置文件字段说明
fieldcount: 每条记录字段个数 (default: 10)
fieldlength: 每个字段长度 (default: 100)
readallfields: 是否读取所有字段true或者读取一个字段false (default: true)
readproportion: 读取作业比例 (default: 0.95)
updateproportion: 更新作业比例 (default: 0.05)
insertproportion: 插入作业比例 (default: 0)
scanproportion: 扫描作业比例 (default: 0)
readmodifywriteproportion: 读取一条记录修改它并写回的比例 (default: 0)
requestdistribution: 请求的分布规则 uniform, zipfian or latest (default: uniform)
maxscanlength: 扫描作业最大记录数 (default: 1000)
scanlengthdistribution: 在1和最大扫描记录数的之间的分布规则 (default: uniform)
insertorder: 记录被插入的规则ordered或者hashed (default: hashed)
operationcount: 执行的操作数.
maxexecutiontime: 执行操作的最长时间,当然如果没有超过这个时间以运行时间为主。
table: 测试表的名称 (default: usertable)
recordcount: 加载到数据库的纪录条数 (default: 0)
参考资料1:https://help.aliyun.com/document_detail/144259.html?spm=a2c4g.11186623.6.737.343d797dh4jlfx