Sysbench-Mongodb与sysbench mysql类似,可用于做压力测试
作者介绍:http://www.tokutek.com/2013/03/sysbench-benchmark-for-mongodb/
安装及运行步骤如下:
1、下载解压 https://github.com/tmcallaghan/sysbench-mongodb
wget https://codeload.github.com/tmcallaghan/sysbench-mongodb/zip/master -O sysbench-mongodb-master.zip
unzip sysbench-mongodb-master.zip
2、运行需要jdk,安装JDK 1.7
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
wget --no-cookies \
--no-check-certificate \
--header "Cookie: oraclelicense=accept-securebackup-cookie" \
"http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-x64.rpm" \
-O jdk-7u55-linux-x64.rpm
#chmod +x jdk-7u 5 5-linux-x64.rpm
#rpm -ivh jdk-7u 5 5-linux-x64.rpm
安装完毕,配置环境变量,编辑/etc/profile文件,在文件中找到export PATH USER LOGNAME 等内容,添加以下内容:
JAVA_HOME=/usr/java/jdk1.7.0_45
JRE_HOME=/usr/java/jdk1.7.0_45/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/libexport PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL JAVA_HOME JRE_HOME CLASSPATH
保存退出,执行:
#source /etc/profile
3、 下载mongo-java-driver 驱动包
wget http://central.maven.org/maven2/org/mongodb/mongo-java-driver/2.11.4/mongo-java-driver-2.11.4.jar
配置环境变量:
export CLASSPATH=$PWD/mongo-java-driver-2.11.4.jar:$CLASSPATH
4、执行测试脚本文件
cd sysbench-mongodb-master
./run.simple.bash
测试脚本主要分成load data和workload两个步骤:
1、Load data部分,我们可以修改collection数量和document数量
{ "_id" : 1 … 10000000 "k" : random integer between 1 and 10000000 "c" : 10 segments of 11 random digits plus hyphen (119 characters total) "pad" : 5 segments of 11 random digits plus hyphen (59 characters total) }
具体如下所示:
> db.sbtest1.find().limit(1)
{
"_id" : 1,
"k" : 548986,
"c" : "87344468893-73242269620-94983725406-35905450777-20807236565-89440163868-45896582721-17821859959-07640351160-42454483377",
"pad" : "01376750983-06661949810-55641668812-30952342371-57477967936"
}
2、负载测试步骤,一个"事务"包含以下操作:
每个客户端线程随机选择一个集合来执行以下所有操作,所有的操作都是通过_id键,范围操作是连续的:
10个随机查询"C" 列
1个100个文档的范围查询“C”列
使用聚合框架在100个文档的范围sum(“K”)
1个100个文档的范围排序"C"列
1个100个文档的范围查找distinct “C” 列
随机更新1个文档的属性“K”(有索引)
随机更新1个文档的属性“C”(无索引)
通过_id随机删除1个文档,然后使用相同的_id插入新文档
具体的一些参数可以直接修改run.simple.bash脚本,基本上能猜出具体的作用,如:
NUM_COLLECTIONS=8 #集合数量
NUM_DOCUMENTS_PER_COLLECTION=1000000 #每集合的文档数量
NUM_DOCUMENTS_PER_INSERT=1000 #每次Insert多少个文档
NUM_LOADER_THREADS=8 #Loaddata时的进程数量
RUN_TIME_MINUTES=10 #负载测试运行多少分钟
NUM_SECONDS_PER_FEEDBACK=10 #每次输出的间隔秒数
MONGO_SERVER=localhost #mongodb服务器
MONGO_PORT=27017 #mongodb端口号
SYSBENCH_READ_ONLY=N #是否只读测试
测试结果:
cum ips: 是总体的平均每秒insert数量 ,也就是总inserts/秒数
int ips :增量平均每秒insert数量,也就是本次10秒内的平均每秒insert数量
cum tps: 是总体的平均每秒事务数量 ,也就是总事务/秒数
int ips :增量的平均每秒事务数量,也就是本次10秒内的平均每秒事务数量