tencent cloud

云数据库 MongoDB

动态与公告
产品动态
公告
新手指引
产品简介
产品概述
产品优势
应用场景
集群架构
产品规格
产品功能
地域和可用区
名词解释
购买指南
计费概述
产品定价
计费公式
欠费说明
备份空间计费
变配计费说明
快速入门
快速创建实例
连接 MongoDB 实例
读写数据库
操作指南
访问管理
管理实例
节点管理
版本升级
网络配置
系统监控
备份与回档
数据库审计
数据安全
SSL 认证
日志管理
数据库管理
多可用区部署
只读灾备
参数配置
回收站
任务管理
诊断优化
数据迁移指引
实践教程
索引优化解决读写性能瓶颈
分片集群 Mongos 负载不均解析及应对方案
分片集群使用注意事项
MongoDB 协议实例读写示例
基于 CVM 连接 MongoDB 进行数据导入导出的方法
3.6版本实例反复创建和删除同名数据库时报错怎么办
无法连接 MongoDB 解决方法
删减分片任务:进度确认与异常排查指南
性能调优
运维开发指南
开发规范
3.2版本分片集群命令支持情况
3.6版本命令支持情况
开发运维
故障处理
慢查询增多
连接数超限
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Backup APIs
Account APIs
Other APIs
Task APIs
Introduction
Data Types
Error Codes
SDK 参考
Shell连接示例
PHP 连接示例
Node.js连接示例
Java 连接示例
Python连接示例
Python 读写示例
Go 连接示例
PHP 重连示例
产品性能
测试环境
测试方法
测试结果
常见问题
费用相关问题
功能特性问题
分片集群问题
实例相关问题
回档备份问题
连接相关问题
数据迁移问题
其他常见问题
相关协议
服务等级协议
Terms of Service
词汇表
联系我们

测试方法

PDF
聚焦模式
字号
最后更新时间: 2024-10-10 10:41:06
本文介绍应用 YCSB 对腾讯云数据库 MongoDB 进行性能测试的完整过程。

测试目标

说明:
MongoDB 数据结构灵活,使用场景复杂多变,很难覆盖到所有场景,最终性能表现建议根据业务实际模型进行测试。
对不同规格的 MongoDB 实例进行性能测试,包含2核4GB、4核8GB、6核16GB等。测试性能指标主要包含 throughput(ops/sec)每秒操作数、RAL(us) 平均读时延、WAL(us) 平均写时延等。
每一种实例规格测试场景如下所示:
50% read + 50% update:读更新比例依次为50%与50%。
95% read + 5% update:读更新比例依次为95%和5%。
5% read + 95% update:读更新比例依次为5%和95%。
100% insert:仅写入数据。
100% read:仅读取数据。
100% update:仅更新数据。

测试步骤

步骤1:远程连接 CVM 实例,下载 YCSB 工具。

1. 使用标准登录方式登录 CVM 实例。具体操作,请参见 登录服务器
2. 在 CVM 上进行 YCSB 下载

步骤2:加载基础测试数据至 MongoDB 数据库

使用 nohup 命令,在后台运行 YCSB 工具,使用配置文件 workloada,连接到指定的 MongoDB 集群,以同步模式加载数据到 test 集合中,并将输出记录到 loadlog.txt 文件中。具体参数解释如下所示。
执行命令分解
解释说明
nohup
Linux 命令通常用于运行需要长时间执行的后台进程,确保这些进程不会因为用户的注销或终端的关闭而中断。
./ycsb-0.17.0/bin/ycsb
YCSB 可执行文件路径。
load
YCSB 的子命令,用于加载数据到数据库。
mongodb
指定要加载的数据库类型 MongoDB。
-s
指定同步模式,即加载操作将在所有操作完成后才返回。
-P workloads/workloada
指定要使用的 YCSB 工作负载配置文件,此处为 workloada。
-p mongodb.url=mongodb://mongouser:password@10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0
指定 MongoDB 的连接 URL 地址。
连接字符串包括用户名、密码、服务器地址和端口号。
w = 0表示写操作不需要确认,即不需要等待写操作的响应。
-p table=test
指定在 MongoDB 中使用的集合名称为 test。
-threads 300
指定用于执行加载操作的线程数量,该示例为300。每一种实例规格对应测试的执行线程数不同。具体信息,请参见 测试结果
-p recordcount=10000000
指定要加载的记录总数。该示例为 1000 万条。每一种实例规格对应测试的数据记录总数不同,具体信息,请参见 测试结果
>loadlog.txt &
将命令的输出重定向到 loadlog.txt 文件,并且使用 & 将命令放入后台执行。
nohup ./ycsb-0.17.0/bin/ycsb load mongodb -s -P workloads/workloada
-p mongodb.url=mongodb://mongouser:password@10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -threads 300 -p recordcount=10000000>loadlog.txt &

步骤3:运行脚本,进行压测。

50%update+50%read

执行总共10,000,000次操作,其中50%为读取操作,50%为更新操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。其中,关键配置参数如下:
-p table=test: 指定在MongoDB中使用的集合名称。
-p recordcount=10000000: 指定数据库中记录的总数。
-p readproportion=0.5: 指定读取操作所占的比例,此处为50%。
-p updateproportion=0.5: 指定更新操作所占的比例,此处为50%。
-p insertproportion=0: 指定插入操作所占的比例,此处为0%,即不执行插入操作。
-p operationcount=100000: 指定要执行的操作总数。
-threads 100: 指定用于执行操作的线程数量。
>runlog.txt &: 将命令的输出重定向到 runlog.txt 文件,并且使用&将命令放入后台执行。
说明:
测试不同的实例规格,recordcount、operationcount、threads 均有差异。具体数据,请参见 测试结果
-p operationcount=100000根据具体执行时间动态调整,需要保证执行时间在二十分钟以上,否则时间过短没有代表性。
?w=0中的 w 表示 write concern。MongoDB写操作的确认级别,设置为0,表示写操作不需要等待服务器的确认。
w:1(应答式写入)要求确认操作已经传播到指定的单个 mongod 实例或副本集主实例,缺省为1。
w:0(非应答式写入)不返回任何响应,所以无法知道写入是否成功,但对于尝试向已关闭的套接字写入或者网络故障会返回异常信息。
w:>1 该值用于设定写入节点的数目,包括主节点。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.5 -p updateproportion=0.5 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

95% update + 5% read

执行总共10,000,000次操作,其中95%为更新操作,5%为读取操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.05 -p updateproportion=0.95 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

5%update + 95%read

执行总共10,000,000次操作,其中5%为更新操作,95%为读取操作,不执行插入操作。在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0.95 -p updateproportion=0.05 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

100%insert

执行总共10,000,000次操作,100%插入操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadb -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0 -p updateproportion=0 -p insertproportion=1 -p operationcount=10000000 -threads 100 >runlog.txt &

100% read

执行总共10,000,000次操作,100%读操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadc -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=1 -p updateproportion=0 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

100% update

执行总共10,000,000次操作,100% Update 操作,在100个线程中并行执行,并将输出记录到 runlog.txt 文件中。
nohup ./ycsb-0.17.0/bin/ycsb run mongodb -s -P workloads/workloadb -p mongodb.url=mongodb://mongouser: password @10.xx.xx.30:27017,10.xx.xx.28:27017,10.xx.xx.5:27017/admin?w=0 -p table=test -p recordcount=10000000 -p readproportion=0 -p updateproportion=1 -p insertproportion=0 -p operationcount=10000000 -threads 100 >runlog.txt &

步骤4:获取测试数据

腾讯云 MongoDB 测试了 4.0、4.4版本,云盘版与物理版,不同实例规格的性能数据,具体测试结果,请参见 测试结果

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈