当前位置: 首页 > news >正文

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

相关文章:

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

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

mysql查询条件包含IS NULL、IS NOT NULL、!=、like %* 、like %*%,不能使用索引查询,只能使用全表扫描,是真的吗???

不知道是啥原因也不知道啥时候, 江湖上流传着这么一个说法 mysql查询条件包含IS NULL、IS NOT NULL、!、like %* 、like %*%,不能使用索引查询,只能使用全表扫描。 刚入行时我也是这么认为的,还奉为真理! 但是时间工作中你会发现还是走索引…...

使用IDEA2023创建传统的JavaWeb项目并运行与调试

日期:2024-0312 作者:dusuanyun 文档环境说明: OS:Deepin 20.9(Linux) JDK: OpenJDK21 Tomcat:10.1.19 IDEA: 2023.3.4 (Ultimate Edition) 本文档默认已经安装JDK及环境变量的配置。 关键词…...

【快捷部署】002_Flink(1.17.2)

📣【快捷部署系列】002期信息 编号选型版本操作系统部署形式部署模式002Flink1.17.2CentOS 7.Xtgz包单机 👉 演示视频 Flink一键安装(本地模式) install-flink.sh 脚本内容 #!/bin/bash ####变量 ###执行脚本的当前目录 mydir$…...

智慧公厕建设,助力打造宜居、韧性、可持续的智慧城市

公共厕所作为智慧城市的重要组成部分,对于城市的高质量发展起着至关重要的作用。智慧公厕建设旨在通过全面监测、控制和管理公共厕所,实现多方面功能,包括公共厕所环境监测与调控、厕位占用监测与引导、消耗品监测与缺失提示、安全防范与管理…...

[Django 0-1] Core.Cache模块

Caching 源码分析 Django 的 cache 缓存机制,包含了一些代理设计模式(代理了但没完全代理,多此一举)。 通过实现一个CacheHandler的manager类,来实现多缓存后端的统一管理和调用,避免到处实例使用。 缓存的目的 缓存的目的就是…...

spy分析文件另存为弹框【selenium】

有时需要下载多个文件,但是不想保存在同一个目录下,需要做两步 selenium设置浏览器默认下载路径,这个路径需要是个不存在的路径操作文件另存为弹框 文章目录 selenium设置浏览器默认下载路径操作文件另存为弹框 selenium设置浏览器默认下载路…...

分布式与集群,二者区别是什么?

🐓分布式 分布式系统是由多个独立的计算机节点组成的系统,这些节点通过网络协作完成任务。每个节点都有自己的独立计算能力和存储能力,可以独立运行。分布式系统的目标是提高系统的可靠性、可扩展性和性能。 分布式服务包含的技术和理论 负…...

(done) 什么是词嵌入技术?word embedding ?(这里没有介绍词嵌入算法)(没有提到嵌入矩阵如何得到)

参考视频:https://www.bilibili.com/video/BV1sw411S7i1/?spm_id_from333.788&vd_source7a1a0bc74158c6993c7355c5490fc600 词嵌入(word embedding):把词汇表中的词或短语 -------- 映射 ----> 固定长度向量 我们可以把 …...

C++静态成员函数和非静态成员函数之间的相互调用

C静态成员函数和非静态成员函数之间的相互调用 一直对C静态成员函数和非静态成员函数之间的相互调用记不住,都是死记硬背,今天突然醍醐灌顶; 1、静态成员函数不能调用非静态成员函数,因为静态成员函数属于类,没有this…...

最好用的流程编辑器bpmn-js系列之基本使用

BPMN(Business Process Modeling Notation)是由业务流程管理倡议组织BPMI(The Business Process Management Initiative)开发的一套标准的业务流程建模符号规范。其目的是为用户提供一套容易理解的标准符号,这些符号作…...

Singularity(八)| conda实战

Singularity(八)| conda实战 8.1 conda 和容器的区别 Conda和容器技术(如Docker)都是现代软件开发和数据科学中常用的工具,用于解决环境依赖和应用部署的问题。尽管它们有着相似的目标,即确保应用可以在不…...

elementui el-select组件多选设置初始值无法修改问题

elementui el-select组件多选设置初始值无法修改问题 对list直接赋值后点击修改select框&#xff0c;此时数据已改变但显示无变化。 <el-select v-model"form.optrList" multiple placeholder"请选择"><el-optionv-for"item in list":k…...

电脑自动关机后文件夹不见了怎么办?别急,找回方法在这里

在使用电脑的过程中&#xff0c;我们都可能会遇到一些令人头疼的问题&#xff0c;其中之一就是电脑突然自动关机后&#xff0c;发现重要的文件夹不见了。这种情况可能会让你感到焦虑和困惑&#xff0c;因为失去的数据可能涉及到工作、学习或生活中的各个方面。不过&#xff0c;…...

tcp/ip协议2实现的插图,数据结构8 (30 - 32章)

(201) 201 三十0 中断优先级补充 (202) 202 三十1 TCP的用户需求 函tcp_usrreq一 (203) 203 三十2 TCP的用户需求 函tcp_usrreq二 (204) 204 三十3 TCP的用户需求 函tcp_usrreq三 (205) 205 三十4 TCP的用户需求 函tcp_usrreq四 (206) 206 三十5 TCP的用户需求 函tcp_usrreq五 …...

挑战杯 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉

文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习多目标跟踪 …...

【数据结构】顺序表的定义及实现方式

文章目录 顺序表的定义顺序表的实现静态分配动态分配动态申请内存空间&#xff0c;动态释放内存空间&#xff08;malloc&#xff0c;free&#xff09; 顺序表的特点总结 顺序表的定义 顺序表也就是用顺序存储的方式实现线性表。 顺序存储。把逻辑上相邻的元素存储在物理位置上…...

R语言数据挖掘-关联规则挖掘(1)

一、分析目的和数据集描述 要分析的数据是美国一区域的保险费支出的历史数据。保险费用数据表的每列分别为年龄、性别、体重指数、孩子数量、是否吸烟、所在区域、保险收费。 本文的主要目的是分析在年龄、性别、体重指数、孩子数量、是否吸烟、所在区域中这些因素中&#xf…...

【ansible】ansible的介绍和安装

前言运维自动化 云计算核心职能 搭建平台架构 日常运营保障 性能效率优化 相关工具 代码管理&#xff08;SCM&#xff09;&#xff1a;GitHub、GitLab、BitBucket、SubVersion 构建工具&#xff1a;maven、Ant、Gradle 自动部署&#xff1a;Capistrano、CodeDeploy 持续…...

二维数组_矩阵交换行

任务描述 给定一个5*5的矩阵&#xff08;数学上&#xff0c;一个rc的矩阵是一个由r行c列元素排列成的矩形阵列&#xff09;&#xff0c;将第n行和第m行交换&#xff0c;输出交换后的结果。 输入格式: 输入共6行&#xff0c;前5行为矩阵的每一行元素,元素与元素之间以一个空格…...

mysql笔记:14. 权限管理

文章目录 MySQL权限授予权限查看权限撤销权限权限生效机制访问控制的实现 在实际生产中&#xff0c;为了保证数据的安全&#xff0c;数据库管理人员需要为不同的操作人员分配不同的权限&#xff0c;限制登录MySQL服务器的用户只能在其权限范围内操作。同时管理员还可以根据不同…...

无硫防静电手指套:高科技产业的纯净与安全新选择

随着科技的飞速发展&#xff0c;高科技产业对于生产环境的纯净度和产品的防静电要求日益严格。为了满足这一高标准的需求&#xff0c;无硫防静电手指套应运而生&#xff0c;以其独特的无硫特性和出色的防静电功能&#xff0c;迅速成为了高科技产业中的纯净与安全新选择。 无硫手…...

由浅到深认识C语言(10):字符串处理函数

该文章Github地址&#xff1a;https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.csdn…...

防范服务器被攻击:查询IP地址的重要性与方法

在当今数字化时代&#xff0c;服务器扮演着重要的角色&#xff0c;为企业、组织和个人提供各种网络服务。然而&#xff0c;服务器也成为了网络攻击者的目标之一&#xff0c;可能面临各种安全威胁&#xff0c;例如DDoS攻击、恶意软件攻击、数据泄露等。为了有效地防范服务器被攻…...

3. ElasticSearch搜索技术深入与聚合查询实战

1. ES分词器详解 1.1 基本概念 分词器官方称之为文本分析器&#xff0c;顾名思义&#xff0c;是对文本进行分析处理的一种手段&#xff0c;基本处理逻辑为按照预先制定的分词规则&#xff0c;把原始文档分割成若干更小粒度的词项&#xff0c;粒度大小取决于分词器规则。 1.2 …...

【Linux】Shell编程【一】

shell是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内核的服务。 Shell属于内置的…...

Windows10+tensorrt+python部署yolov5

一、安装cuda 打开NVIDIA控制面板 —>帮助—>系统信息—>组件&#xff0c;找到驱动版本新&#xff0c;我这边是11.2&#xff0c; 然后去CUDA Toolkit Archive | NVIDIA Developer下载对应版本的CUDA&#xff0c;根据查看的CUDA型号确定对应的cuda Toolhit版本&#…...

【前端框架的发展史详细介绍】

前端框架的发展史 前端框架的发展史可以追溯到1995年&#xff0c;当时微软推出了IE浏览器并开始支持CSS&#xff0c;随后&#xff0c;在1997年&#xff0c;W3C&#xff08;万维网联盟&#xff09;发布了CSS的第一个正式标准。 在2003年&#xff0c;苹果推出了Safari浏览器&am…...

[JAVAEE]—进程和多线程的认识

文章目录 什么是线程什么是进程进程的组成什么是pcb 进程概括线程线程与进程的关系线程的特点 创建线程创建线程方法创建线程的第二种方法对比 其他的方式匿名内部类创建线程匿名内部类创建Runable的子类lambda表达式创建一个线程 多线程的优势 什么是线程 什么是进程 首先想…...

sqllab第十九关通关笔记

知识点&#xff1a; 错误注入 最大长度为32位&#xff1b;如果目标长度>32时&#xff0c;需要利用截取函数进行分段读取referer注入 insert语句update语句 通过admin admin进行登录发现页面打印除了referer字段的信息 这应该是一个referer注入 首先进行测试一下 构造payl…...