温馨提示×

centos mongodb怎样调性能

小樊
39
2026-09-08 21:48:39
栏目: 云计算

CentOS 上调优 MongoDB 性能,通常从 系统层、MongoDB 配置、索引、查询、硬件 几个方面入手。下面给你一套实用、可落地的调优指南


一、系统与内核调优(CentOS)

1. 关闭 Transparent Huge Pages(必须)

MongoDB 官方明确要求关闭 THP。

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

永久生效(CentOS 7/8)

systemctl disable tuned

或写开机脚本:

vi /etc/rc.d/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
chmod +x /etc/rc.d/rc.local

2. 调整 ulimit(文件描述符 & 进程数)

vi /etc/security/limits.conf
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000

3. 磁盘调度策略

建议使用 deadlinenone(SSD)

cat /sys/block/sda/queue/scheduler
echo deadline > /sys/block/sda/queue/scheduler

4. 使用 XFS 文件系统(推荐)

mkfs.xfs /dev/sdb

二、MongoDB 配置优化(mongod.conf)

1. 内存相关

storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 4   # 建议 = 物理内存的 50%~70%

2. 日志优化(写密集场景)

storage:
  journal:
    commitIntervalMs: 100

3. 网络线程

net:
  maxIncomingConnections: 65536

4. 慢查询日志

operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

三、索引优化(最重要)

1. 查看慢查询

db.system.profile.find().sort({ts:-1}).limit(10)

或:

mongostat
mongotop

2. 创建合适索引

db.orders.createIndex({ user_id: 1, created_at: -1 })

3. 覆盖索引(避免回表)

db.orders.find(
  { status: "paid" },
  { _id: 0, order_id: 1 }
)

4. 避免索引滥用

  • 写多读少:少建索引
  • 单字段索引 vs 复合索引要权衡

四、查询与写入优化

1. 避免全表扫描

db.users.find({ age: { $gt: 20 } }).explain("executionStats")

关注:

  • COLLSCAN
  • IXSCAN

2. 批量写入

db.collection.insertMany([...])

3. 使用投影减少数据传输

db.users.find({}, { name: 1, _id: 0 })

五、副本集 & 分片(高并发场景)

副本集

  • 读写分离
db.getMongo().setReadPref("secondary")

分片

  • 数据量 > 500GB
  • 写入瓶颈明显

六、监控工具(必装)

mongostat
mongotop

或:

  • MongoDB Atlas
  • Prometheus + Grafana

七、典型性能问题速查表

问题 原因 解决
CPU 高 缺索引 建索引
磁盘 IO 高 Journal / 写放大 SSD
内存不足 cacheSize 小 调大
连接爆 ulimit 调高
延迟高 THP 关闭

八、最简调优清单(直接用)

✅ 关闭 THP
✅ 调整 ulimit
✅ XFS + SSD
✅ 合理 cacheSizeGB
✅ 慢查询 + 索引
✅ 开启 slowOp


如果你愿意,可以告诉我:

  • MongoDB 版本
  • 数据量 / QPS
  • 是否副本集 / 分片
  • 主要读写场景

我可以给你针对性调优方案或配置文件模板

0