MongoDB性能调优之--关闭THP

THP全称:Transparent Hugepages,中文翻译为透明大页。

透明大页 (THP) 是一种Linux内存管理系统,可减少转换后备缓冲区 (TLB) 查找的开销。 THP 通过组合小页面并使其在应用程序中显示为较大的内存页面来实现此目的。

但是,在Linux上运行MongoDB 7.0或更早版本时应禁用 THP以获得最佳性能。 在MongoDB的早期版本中,启用 THP 后,数据库工作负载的性能通常会下降,因为它们经常使用非连续的内存访问权限模式。

注意从MongoDB 8.0开始, MongoDB使用 TCMalloc 的升级版本,可通过启用透明大页来提高性能。此版本使用每 个CPU 缓存而不是每个线程缓存,以减少内存碎片,并使数据库对高压工作负载更有弹性。所以,在做THP优化之前,需要先确认下当前使用的MongoDB的版本

这些信息在官网上都能查到,点此查看。以下是截图,框起来的部分,就是上面描述的内容:

下面,通过创建服务文件来禁用THP服务。

注意:THP 在系统级别运行,因此适用于系统下的所有进程,无法按照进程级别来启用或禁用 THP。

1、创建systemd单元文件

复制以下内容并将其保存在 /etc/systemd/system/disable-transparent-huge-pages.service 中:

bash 复制代码
[Unit]
Description=Disable Transparent Huge Pages (THP)
After=sysinit.target local-fs.target
Before=mongod.service

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag"
RemainAfterExit=yes
StandardOutput=journal

[Install]
WantedBy=multi-user.target

注意:/sys/kernel/mm/redhat_transparent_hugepage/enabled 该路径可能和系统的版本有关系,因此,请检查下该路径文件是否存在,如有不同,记得更改为正确的路径。

2、重新加载systemd服务

运行以下命令:

bash 复制代码
sudo systemctl daemon-reload
3、启动服务

运行:

bash 复制代码
sudo systemctl start disable-transparent-huge-pages

要验证相关的 THP 设置是否已更改,有两种方式:

a、查看相关文件,比如:

bash 复制代码
cat /sys/kernel/mm/transparent_hugepage/enabled && \

cat /sys/kernel/mm/transparent_hugepage/defrag

如果启动成功,输出应如下所示:

bash 复制代码
never
never

b、如果MongoDB的版本<=4.4,不禁用THP,则在启动日志里面会有如下打印:

bash 复制代码
{"t":{"$date":"2025-12-08T16:37:20.604+08:00"},"s":"W",  "c":"CONTROL",  "id":22178,   "ctx":"initandlisten","msg":"/sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'","tags":["startupWarnings"]}
{"t":{"$date":"2025-12-08T16:37:20.604+08:00"},"s":"W",  "c":"CONTROL",  "id":22181,   "ctx":"initandlisten","msg":"/sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'","tags":["startupWarnings"]}

如果禁用成功,则这两条warning信息将不会出现。

4、配置随操作系统启动

运行以下命令:

bash 复制代码
sudo systemctl enable disable-transparent-huge-pages

因为系统默认情况下就是开启的,所以就这里就不再赘述了,有需要的同学,可参考官网来开启THP。

相关推荐
OceanBase数据库官方博客2 小时前
OceanBase AI 时代,数据库的变与不变(技术解析与实践)
数据库·人工智能·oceanbase
阿成学长_Cain3 小时前
Linux dirs命令详解|Bash目录堆栈管理快速切换目录实战教程
linux·运维·前端·数据库
ywl4708120874 小时前
Mysql 平衡二叉树、红黑树、B树、B+树区别以及应用场景(五)
数据库·b树·mysql
IvorySQL4 小时前
IvorySQL Agent 探索与实践
数据库·人工智能·postgresql·oracle·ivorysql
SelectDB5 小时前
美团数十 PB 规模 Apache Doris 实践:从统一 OLAP 到 AI-Native 数据基座
大数据·数据库·性能优化
Database_Cool_5 小时前
阿里云RDS主从延迟解决方案_只读实例半同步复制最佳实践
数据库·人工智能
KaMeidebaby6 小时前
卡梅德生物技术快报|小 RNA 适配体合成 + 多方法亲和力表征全流程标准化操作手册
前端·网络·数据库·人工智能·算法
卓怡学长6 小时前
w269基于spring boot + vue 候鸟监测数据管理系统
java·数据库·spring boot·spring·intellij-idea
ClouGence6 小时前
MySQL 到 StarRocks 数据迁移同步:同步方案与实践指南
数据库·mysql
灯澜忆梦6 小时前
【MySQL2】| DML数据操作语言
数据库·sql