MongoDB性能最佳实践:如何制定更有效的基准测试?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
简介: 感谢你与我们一起走过这段MongoDB性能最佳实践之旅,希望你能从中获取一些有用的信息

欢迎阅读MongoDB性能最佳实践的系列博文之基准测试篇。

在本系列中,我们从多个重要维度上讨论实现规模化性能的关键因素,包括:

● 数据建模与内存优化
● 查询模式和性能分析
● 索引
● 分片
● 事务和读/写关注
● 硬件和操作系统配置
● 基准测试(本期讨论的内容)

通用基准测试可能会存在误导,并不能代表所有技术以及该技术在特定应用中的性能。

我们建议你根据应用程序实际所使用的数据、查询和部署环境来制定基准测试。

以下注意事项将帮助制定更有效的基准测试。

使用多个并行线程

特别是对于分片集群和某些特定配置(如writeConcern majority)来说,单个操作的延迟可能非常大,因此需要使用多个线程来保证吞吐量。

使用批量写入

同样,为了减少网络往返的开销,你可以使用批量写入一次加载(或更新)多个文档。

在数据加载之前创建Chunks

在创建新的分片集合时,在加载数据之前对chunks进行预分割。如果不进行预分割,数据可能会在加载到一个分片的过程中就被移动到其他分片。通过预分割数据,文档将并行加载到适相应当的分片中。如果你的基准测试不包括范围查询,那么可以使用基于哈希的分片来确保写入和读取的均匀分布。

考虑分片键的顺序

如果你配置了基于范围的分片,并且按分片键对数据进行排序,那么在给定时间内的所有插入操作必然都将进入同一个Chunk的同一个分片。那么添加多个分片就没有意义了,因为在给定时间内只有一个分片处于活跃状态。

你可以通过设计数据加载使得不同的分片键值并行插入到不同的分片中:如果你的数据按分片键顺序排序,那么可以使用基于哈希的分片,确保键值相近的并行插入将被路由到不同的分片。

批量加载时禁用平衡器

在批量加载期间,防止均衡器进行不必要的重新数据平衡,这样可以提高性能。

为系统进行预热数分钟

在用于生产环境的 MongoDB 系统中,工作集应放在内存中,所有读写操作都将在内存中执行。MongoDB必须首先把工作集读到内存中,因此在进行测试之前,先用有代表性的查询对系统进行几分钟的预热,从而更加准确地了解 MongoDB 在生产环境中的性能。

使用连接池

每次操作都重新建立连接需要额外的时间,尤其是在使用 TLS 的情况下。你可以参考官方文档中的连接池选项。

配置 ulimits 同样很重要。

通过监控找到瓶颈

无论是运行基准测试还是生产工作负载,监控部署环境都非常重要。

阿里云MongoDB提供的监控功能可以对实例各节点资源的运行情况进行监控,你可以通过基本监控功能查看常用资源(例如CPU使用率和内存使用率)的运行情况。

同时,阿里云MongoDB 提供的告警功能也支持为实例的重要监控项设置阈值报警规则。当监控项的值不在设置的阈值范围内时,系统会自动向你发出报警通知,提醒您数据异常,帮助您快速定位问题并进行处理。

image.png

图1:以查看某一时间点的监控信息为例

image.png

图2:设置告警规则

性能诊断最佳实践

MongoDB实例内存使用率高问题

解决MongoDB实例的CPU使用率高的问题

如何解决MongoDB实例IOPS使用率高的问题

MongoDB实例空间使用率高问题

长按复制链接阅读以上操作指南:https://help.aliyun.com/zh/mongodb/user-guide/best-practices/?spm=a2c4g.11186623.0.0.79084e46YvNiW0

基准性能压测

如果你想进行MongoDB不同规格的基准性能压测,可以参考以下文档:
性能白皮书_云数据库MongoDB 版(MongoDB)-阿里云帮助中心 https://help.aliyun.com/zh/mongodb/support/performance-white-paper/

总结

感谢你与我们一起走过这段MongoDB性能最佳实践之旅,希望你能从中获取一些有用的信息。

阿里云提供了性能诊断与优化的帮助文档,你也可以加入我们的服务钉钉群(MongoDB开发者技术群1群:26895026108 ,MongoDB开发者技术群2群:28325026378)获得更多专家指导。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
4天前
|
SQL 安全 Java
探索软件测试的多维策略:从单元到集成,再到性能与安全
在软件开发生命周期中,测试是不可或缺的一环。本文将深入探讨软件测试的多维策略,从单元测试、集成测试到性能测试和安全测试等各个层面进行剖析。我们将通过具体的统计数据和案例分析,揭示不同测试策略的优势和应用场景。文章旨在为读者提供一个全面的测试框架,帮助他们构建更稳定、高效和安全的系统。
16 2
|
19天前
|
存储 监控 数据可视化
性能测试:主流性能剖析工具介绍
**性能剖析**是识别应用性能瓶颈的关键,涉及指标收集、热点分析、优化建议及可视化报告。常用工具有:**JConsole**监控JVM,**VisualVM**多合一分析,**JStack**分析线程,**FlameGraph**展示CPU耗时,**SkyWalking**分布式跟踪,**Zipkin**追踪服务延迟。这些工具助力开发人员提升系统响应速度和资源效率。
26 1
|
2天前
|
SQL 弹性计算 测试技术
实时数仓Hologres TPC-H及点查性能开箱测试
Hologres现在仍然是TPCH-30000榜单的全球第一,领先第二名高达23%,最新发布的2.2版本相比之前的1.x的版本性能大约提升100%。
|
6天前
|
存储 Java
有没有什么办法测试日志内容大小对系统性能的影响
有没有什么办法测试日志内容大小对系统性能的影响
|
1月前
|
SQL 安全 Java
探索软件测试的多维策略:从单元到集成,再到性能与安全
在软件开发过程中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的多维策略,包括单元测试、集成测试、性能测试和安全测试。我们将分析每种测试方法的优势和局限性,并讨论如何将这些策略整合到一个全面的测试计划中,以提高软件的可靠性和安全性。文章还将提供实用的例子和最佳实践,帮助读者更好地理解和应用这些测试技术。
|
12天前
|
测试技术 数据库 Python
在系统工程中,软件测试是一个至关重要的环节,它确保软件的质量、可靠性和性能。软件测试通常包括多个阶段,如单元测试、集成测试、系统测试和验收测试等。
在系统工程中,软件测试是一个至关重要的环节,它确保软件的质量、可靠性和性能。软件测试通常包括多个阶段,如单元测试、集成测试、系统测试和验收测试等。
|
1月前
|
NoSQL 测试技术 MongoDB
使用同步和异步方式更新插入MongoDB数据的性能对比
在这篇文章中,我将探讨如何使用同步和异步方式插入数据到MongoDB,并对两种方式的性能进行对比。并将通过Python中的 pymongo 和 motor 库分别实现同步和异步的数据插入,并进行测试和分析。
|
1月前
|
编译器 测试技术 Linux
技术洞察:循环语句细微差异下的性能探索(测试while(u--);和while(u)u--;的区别)
该文探讨了两种循环语句(`while(u--);` vs. `while(u) u--;`)在性能上的微妙差异。通过实验发现,后者比前者平均执行速度快约20%,原因在于循环条件检查的顺序影响了指令数量。尽管差异可能在多数情况下不显著,但在性能关键的代码中,选择合适的循环结构能优化执行效率。建议开发者在编写循环时考虑编译器优化和效率。未来研究可扩展到不同编译器、优化级别及硬件架构的影响。
|
1月前
|
算法 Linux 测试技术
Linux编程:测试-高效内存复制与随机数生成的性能
该文探讨了软件工程中的性能优化,重点关注内存复制和随机数生成。文章通过测试指出,`g_memmove`在内存复制中表现出显著优势,比简单for循环快约32倍。在随机数生成方面,`GRand`库在1000万次循环中的效率超过传统`rand()`。文中提供了测试代码和Makefile,建议在性能关键场景中使用`memcpy`、`g_memmove`以及高效的随机数生成库。
|
25天前
|
固态存储 测试技术 数据库
最新测试揭秘:TDengine 线性扩展能力能否满足你的性能需求?
**摘要:** TDengine 的线性扩展能力通过CPU和磁盘测试得以验证。在CPU测试中,使用TDengine V3.3.0.0和taosBenchmark,随着CPU核数从4增至12,写入性能线性提升,每个CPU增加对应约50W条/秒的提升,保持CPU在瓶颈状态。磁盘IO测试中,使用低速机械盘,增加磁盘数量导致写入性能成比例增长,充分利用新增磁盘IO。测试结果表明,无论CPU还是磁盘扩展,TDengine都能有效利用资源,展示出出色的线性扩展能力。
15 0