MongoDB性能最佳实践:硬件和操作系统配置

请添加图片描述

欢迎阅读有关MongoDB性能最佳实践的系列博文。在往期文章中,我们已经讨论过查询模式和性能分析、事务和读/写关注等实现大规模性能的关键考虑因素。在本篇文章中,我们将讨论硬件和操作系统配置

如果您在阿里云上部署MongoDB,那么阿里云会为您处理好有关硬件和操作系统配置的诸多考虑因素。您可以参考阿里云官网的产品规格文档来选择合适的实例规格。

如果您自己在本地部署MongoDB,那么您可以参考本文以下内容。

在支持的平台上运行

除了在阿里云上运行MongoDB,您还可以选择各种操作系统和处理器架构,从x86-64、ARM处理器到IBM POWER、大型计算机系统。

请前往MongoDB官网-资源-服务器文档-支持平台,查看最新的硬件和操作系统支持矩阵。

确保工作集与内存适配

当应用程序的工作集(索引和最常访问的数据)与内存适配时,MongoDB的性能会达到最佳。内存大小是影响实例大小的最重要因素,如果内存不足,其他优化动作可能也无法显著提高数据库的性能。

使用多个CPU内核

MongoDB的WiredTiger存储引擎架构能够高效地使用多个CPU内核。每个客户端的连接通常都有对应的线程,此外,后台还有执行检查点机制和缓存清除等任务的工作线程。您应根据并发客户端连接的数量来配备足够的CPU核数。请注意,投入更多的内存和磁盘IOPS对数据库性能的改善效果最大。

在阿里云MongoDB中,CPU核数和客户端最大连接数取决于您选择实例规格。您可以参考阿里云官网的实例规格表文档来选择合适的实例规格。

将每个服务器专用于系统中的单一角色

为了获得最佳性能,您应该在每个主机上运行一个MongoDB进程。

通过使用虚拟化或容器技术进行适当的内存和资源分配,多个MongoDB进程可以安全地运行在单个物理服务器上,而无需争夺资源。

对于某些用例(如多租户),用户会在同一主机上部署多个MongoDB进程。在这种情况下,您需要更改配置以确保每个进程都有足够的资源。

为了保证可用性,同一副本集的多个成员应部署在不同的物理硬件上(如电源或网络交换机),避免同时承担单点故障的风险。

配置WiredTiger缓存

WiredTiger存储引擎的内部缓存大小可以通过storage.wiredTiger.engineConfig.cacheSizeGB进行设置,其大小应足以容纳整个工作集。如果缓存没有足够的空间来加载额外的数据,WiredTiger将从缓存中驱逐页面,从而释放空间。

在默认设置下,

storage.wiredTiger.engineConfig.cacheSizeGB为可用内存的50%再减 1 GB。应谨慎提高该值,因为这会占用操作系统的资源,而且随着文件系统缓存效率降低,WiredTiger的性能也会下降。请注意,MongoDB本身也会分配超出WiredTiger缓存的内存。

此外,由于MongoDB支持可变大小的记录,同时WiredTiger会创建可变大小的页面,因此预计会出现一些内存碎片,这将会消耗超出配置的内存。

使用多个查询路由器

多个mongos进程(查询路由器)应分布在多台服务器上。您使用的mongos进程数量至少应与分片数量相同。

阿里云MongoDB会自动为集群中的每个分片配置一个查询路由器。

在NUMA架构上使用内存交织策略

在具有非一致内存存取(NUMA)的系统上运行MongoDB可能会导致一系列问题,包括一段时间内性能下降、无法使用所有可用内存、高系统进程使用率。

当在NUMA硬件上运行MongoDB服务器和客户端时,您应该使用numactl --interleave命令配置内存交织策略。

网络压缩

作为分布式数据库,MongoDB在查询路由和节点间复制过程中依赖于高效的网络传输。基于snappy压缩算法,MongoDB集群间的网络流量最多可压缩80%,从而在带宽受限的环境中带来显著的性能优势,并降低网络成本。

您可以通过在连接字符串中添加compressors参数来启用压缩:mongodb://localhost/?compressors=snappy。

存储和磁盘I/O注意事项

尽管MongoDB通过内存数据结构执行所有读写操作,但数据会持久化到磁盘上,如果查询数据不在内存中,则会触发对磁盘的读取。因此,存储系统的性能对任何系统来说都至关重要。

您应使用高性能存储,以下考虑因素将帮助您使用最佳的存储配置,包括操作系统和文件系统设置。

(1)对于I/O密集型应用程序使用固态硬盘

在MongoDB中,大多数磁盘访问模式都不具备顺序属性,因此使用固态硬盘可以大幅提高性能。

使用SATA、PCIe和NVMe固态硬盘有非常高的性价比。与其花高价购买昂贵的旋转驱动器,还不如多买一些内存或固态硬盘。如果工作集不再适配内存,也应使用固态硬盘来读取密集型应用程序。

建议您将MongoDB的日志文件存储在单独的磁盘分区上。

大多数MongoDB部署都应使用RAID-10存储配置。RAID-5和RAID-6存在一些限制,可能无法提供足够的性能。MongoDB的副本集可以通过合理部署提高数据可用性,应同时考虑RAID等其他因素,从而共同满足所需的可用性SLA。您不需要购买SAN磁盘阵列就可以实现高可用性。

(2)对于存储和I/O密集型工作负载,请使用MongoDB的默认压缩功能

默认的snappy压缩通常可以减少50%或更多的存储占用,并且由于从磁盘中读取的位数更少了,因此还可以提高IOPs。任何压缩算法都要在存储效率和CPU开销之间做权衡,因此您需要在自己的环境中进行压缩测试。

MongoDB为文档和索引提供了一系列压缩选项。snappy压缩算法在高文档压缩率(通常为50%+,取决于数据类型)与低CPU开销之间实现平衡,zStandard和zlib库可以实现更高的压缩率,但在从磁盘读取数据时会产生额外的CPU开销。zStandard在MongoDB 4.2版本中引入,与zlib库相比CPU开销更低。

索引默认使用前缀压缩,可以减少索引存储的内存占用,为频繁访问的文档腾出更多的内存。测试表明,使用前缀算法的压缩率通常为50%,但仍然建议您使用自己的数据集进行测试。

您可以修改所有集合和索引的默认压缩设置,也可以在集合和索引的创建过程中根据特定需求进行配置。

(3)配置预读(readahead)

建议将预读设置在8到32之间。您可以使用blockdev --setra命令来设置预读块大小。

(4)使用XFS文件系统,避免使用EXT4

由于在 WiredTiger 中使用 EXT4 时出现过性能问题,因此强烈建议使用XF。

(5)禁用访问时间设置

一些文件系统会保留文件最后一次被访问时的元数据。虽然这对某些应用程序可能有用,但在数据库中,这意味着每次数据库访问页面,文件系统都会进行一次写入操作,这将对系统的性能和吞吐量产生负面影响。

(6)禁用透明大页(Transparent Hugepages)

透明大页可能会增加额外的内存压力和CPU利用率,并对交换性能产生负面影响。

更多内容

有关最新的硬件和操作系统配置指南,请查看MongoDB Production Notes和Operations Checklist。

请长按复制网址访问:

https://docs.mongodb.com/manual/administration/production-notes

https://docs.mongodb.com/manual/administration/production-checklist-operations

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端tabBar的固定问题

tabBar原本是 position: fixed的布局,会导致元素脱标,不占位,上面的内容就会被覆盖 .layout {height: 100%;display: flex;flex-direction: column;.main{flex: 1;overflow: hidden; // 隐藏二级路由中超出main高度的内容}.van-tabbar {posi…

运维自动化之ansible

pxe 一键安装操作系统 操作系统只是提供一个平台 lnmp 需要多软件协同完成的一个简单项目 服务器正常运行 日常运维 巡检 服务器上的软件正常运行 zabbix 普罗米修斯 系统调优,架构调优 云计算核心职能 搭建平台架构 日常运营保障 性能效率优化 相关工具 代…

lucky-canvas实现老虎机、九宫格和大转盘抽奖

lucky-canvas是一款开源免费的基于 jscanvas 的前端插件,UI精美,功能强大,使用起来比较方便。 lucky-canvas官网https://100px.net/ 一、使用 注意:下例是vue中的应用,具体还有js和uniapp中的应用,详细查…

部署zabbix6.0.27 执行 make install 报错

CentOS7 部署 zabbix6.0.27 执行 make install 报错 报错信息 [rootlocalhost zabbix-6.0.27]# make install /usr/bin/ld: warning: libssl.so.3, needed by /usr/local/mysql/lib/libmysqlclient.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: l…

EasyExcel导出自定义表格

谈到新技术,每个人都会有点恐惧,怕处理不好。确实,第一次使用新技术会遇到很多坑,这次使用 EasyExcel 这个新技术去做 excel 导出,还要给表格加样式,遇到不同的版本问题,遇到颜色加错了地方&…

web开发——前端html、css、JavaScript学习总结(持续更新中.......)

目录模版 1 html:结构标签/属性文本标记: mark文本设置:删除线del / 下划线ins/ 加粗b / 强调的文本em / 重要的文本 strong超链接: a联系信息: addressdiv 定义文档中的分区或节: div行元素:spanhtml结构: main / section / articlenav表格:table html中各种标签/属性的英文扩…

记一次寻找js来文件上传

edu教育证书站之路 0x01 信息收集 通过fofa,子域名收集等相关工具搜索域名 定位到站点:htps://xx..edu.cn/x/xx/ 0x02 寻找接口 通过f12寻找相关的js,发现有其他的页面 0x03 拼接路径 https://xx.xx.edu.cn/xx/xx/repairResgister 之后未授权…

主流接口测试框架对比

公司计划系统的开展接口自动化测试,需要我这边调研一下主流的接口测试框架给后端测试(主要测试接口)的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求,看哪个框架更适合我们。 需求 1、接口编写…

亿道三防手持机丨安卓加固手持终端丨手持机PDA丨货物出入库

出入库管理是现代物流系统中的重要环节,涉及到货物的接收、分发、存储和追踪等方面。然而,在复杂的仓库环境中,传统的管理方法面临着很多困难和挑战,如手写记录容易出错、数据处理繁琐等。为了提高出入库管理的效率和准确性&#…

【新手适用】手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN一: 创建model模块和加载数据集

教程:j从零开始实现一个基于Pytorch的卷积神经网络 - 知乎 目录 网络结构 1 初始化 2 前向传播forward函数 2.1 forward函数定义 2.2 view函数和size函数 如何获取channels? 如何获取batchsize? 2.3 forward实现 2.4 main方法调用 模…

企业微信变更主体对用户有影响吗?

企业微信变更主体有什么作用?现在很多公司都用企业微信来加客户,有时候辛辛苦苦积累了很多客户,但是公司却因为各种各样的原因需要注销,那么就需要通过企业微信变更主体的方法,把企业微信绑定的公司更改为最新的。企业…

Java后端八股------消息中间件篇

自动确认没收到,实现重复消费问题,可以用业务唯一标识来确定业务是否被消费。 TTL也就是超时时间,一般去dead letter的时间为min(消息的ttl,queue的ttl)。 acksall设置是最安全的,但是效率太低了,实际的生…

鲜花销售小程序|基于微信小程序的鲜花销售系统设计与实现(源码+数据库+文档)

鲜花销售小程序目录 目录 基于微信小程序的鲜花销售系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1前台功能模块 2、后台功能模块 1、管理员功能模块 四、数据库设计 1、实体ER图 2、具体的表设计如下所示: 五、核心代码 六、论文参考 七、…

【io.net】问题汇总

【io.net】问题汇总 大家最近挖挖的如火如荼,可是不论是社区活动积分和参与挖矿积分,大家遇到了很多类似问题,重复解决。 因此我这里整理了一下常见的相关问题,大家可以一站式找到解决方案。解决方案主要分为运营和挖矿两个两面…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的障碍物检测系统(Python+PySide6界面+训练代码)

摘要:开发障碍物检测系统对于道路安全性具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个障碍物检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5,展示了不同模型间的性能…

如何解决由触发器导致 MySQL 内存溢出?

由触发器导致得 OOM 案例分析过程和解决方式。 作者:龚唐杰,爱可生 DBA 团队成员,主要负责 MySQL 技术支持,擅长 MySQL、PG、国产数据库。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编…

苹果cms模板保护设置,防止被扒

苹果cms模板保护设置,防止被扒 如今互联网时代,网站模板前端被扒是常有的事,如何防止模板数据被扒? 保护设置方法: 登录宝塔 找到安装模板的网站 设置禁止访问文件 方法参考截图后缀填:php|html 目录填&a…

OA系统中的九大常用审批场景,你都晓得吗?

Hi,我是贝格前端工场,今天继续来剖析OA的功能,这次重点分析审批功能,欢迎老铁们点赞评论转发。 一、OA的审批功能和流程 OA的审批功能是指在办公自动化系统中,通过电子化的方式实现对各种申请、请求或业务流程的审批管…

项目管理工具及模板(甘特图、OKR周报、任务管理、头脑风暴等)

项目管理常用模板大全: 1. 项目组OKR周报 2. 项目组传统周报工作法 3. 项目甘特图 4. 团队名单 5. 招聘跟进表 6. 出勤统计 7. 年度工作日历 8. 项目工作年计划 9. 版本排期 10. 项目组任务管理 11. 项目规划模板 12. 产品分析报告 13. 头脑风暴 信息化项目建设全套…

阻塞队列学习

1、什么是阻塞队列? 顾名思义,就是支持阻塞的队列,相比于其他的队列,阻塞队列支持以下特性: 队列为空的时候,获取元素的线程会等待队列变为非空。队列为满的时候,存储元素的线程会等待队列可以…