温馨提示×

centos mongodb怎样优化

小樊
45
2026-10-02 22:29:19
栏目: 云计算

在 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
systemctl stop tuned

或写脚本 /etc/rc.d/rc.local:

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

2. 调整系统限制(ulimit)

MongoDB 需要大量文件描述符和进程数。

编辑 /etc/security/limits.conf:

mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000

3. 磁盘与文件系统

  • 推荐使用 XFS(MongoDB 官方推荐)
  • 挂载选项:
/dev/sdb /data xfs defaults,noatime,nodiratime 0 0
  • 尽量使用 SSD / NVMe
  • 分离:
    • 数据盘
    • 日志盘(可选)

4. 内核参数优化

sysctl -w vm.swappiness=1
sysctl -w vm.dirty_ratio=10
sysctl -w vm.dirty_background_ratio=5

写入 /etc/sysctl.conf 永久生效。


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

1. 存储引擎(WiredTiger)

storage:
  dbPath: /data/mongodb
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 8   # 物理内存的 50%-70%
    collectionConfig:
      blockCompressor: snappy

⚠️ cacheSizeGB 不要超过物理内存的 80%


2. 日志与慢查询

systemLog:
  verbosity: 0
operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

3. 网络与连接

net:
  port: 27017
  bindIp: 0.0.0.0
  maxIncomingConnections: 65536

三、索引与查询优化(最重要)

1. 建合适的索引

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

2. 使用覆盖索引

避免 SELECT * 式查询,只返回需要的字段。

3. 分析慢查询

db.currentOp()
db.orders.find({...}).explain("executionStats")

关注:

  • COLLSCAN(全表扫描 ❌)
  • IXSCAN(索引扫描 ✅)

四、写入优化

1. 批量写入

db.collection.insertMany(docs)

2. 写关注(Write Concern)

非核心数据可降低:

writeConcern: { w: 1, j: false }

⚠️ 交易/订单类不建议这样


五、副本集 / 分片(架构层)

1. 副本集(必须)

  • 1 Primary + 2 Secondary
  • 读请求走 Secondary

2. 分片(数据量大时)

  • 按业务维度分片
  • 避免热点 shard

六、监控与维护

1. 官方工具

  • mongostat
  • mongotop

2. 第三方

  • Prometheus + Grafana
  • MongoDB Atlas(云)

七、常见性能问题速查

现象 可能原因
CPU 高 缺索引 / 聚合重
磁盘 IO 高 Journal / 写放大
延迟抖动 THP 未关
内存爆 cacheSize 过大
连接数爆 连接未复用

八、示例:典型生产配置(16G 内存)

storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 10
systemLog:
  logRotate: reopen
operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 50

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

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

我可以给你 更针对性的优化配置。

0 踩