温馨提示×

debian mongodb怎么调优

小樊
37
2026-10-02 11:48:57
栏目: 云计算

在 Debian 上调优 MongoDB,通常从系统层、MongoDB 配置、索引与查询、监控几个方面入手。下面给你一套比较实用的调优思路(以 MongoDB 5.x/6.x + Debian 11/12 为例)。


一、系统层调优(Debian)

1. 关闭 Transparent Huge Pages(必做)

MongoDB 官方明确要求关闭 THP。

sudo apt install hugepages
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag

开机自动关闭:

sudo systemctl edit mongod

添加:

[Service]
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"

2. 文件描述符 & 进程数

编辑:

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

确认:

ulimit -n

3. 磁盘与文件系统

  • 使用 XFS(推荐)
  • 挂载选项:
/dev/sdb /data xfs defaults,noatime 0 0
  • 尽量使用 SSD / NVMe
  • 不要启用 atime

4. 内核参数(可选)

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

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

路径通常是:

/etc/mongod.conf

1. 存储引擎(WiredTiger)

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

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


2. 网络与连接

net:
  port: 27017
  bindIp: 0.0.0.0
  maxIncomingConnections: 65536

3. 写关注 & 日志(性能 vs 安全)

replication:
  replSetName: rs0

如果是单机测试:

storage:
  journal:
    enabled: true

高写入场景可考虑:

writeConcern: { w: 1, j: false }

(但有断电丢数据风险)


三、索引与查询优化(最关键)

1. 查看慢查询

db.setProfilingLevel(1, { slowms: 100 })

分析:

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

2. 创建合适索引

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

避免:

  • 全表扫描
  • 索引过多(写放大)

3. 使用 explain

db.orders.find({ user_id: 123 }).explain("executionStats")

关注:

  • COLLSCAN ❌
  • IXSCAN ✅
  • totalKeysExamined vs totalDocsExamined

四、副本集 & 分片(按需)

  • 读多写少:增加 Secondary + readPreference
  • 数据量大:考虑 Sharding
  • 写压力高:使用 bulk write

五、监控与排查工具

1. 自带

db.serverStatus()
db.stats()

2. 系统

top
iostat -x 1
iotop

3. 官方工具

  • mongostat
  • mongotop

六、常见性能问题速查

问题 可能原因
CPU 高 缺索引 / 聚合重
IO 高 内存不足 / 无 SSD
延迟高 锁等待 / 网络
OOM cacheSize 太大

七、示例:典型优化组合

  • Debian 12
  • XFS + NVMe
  • 关闭 THP
  • WiredTiger cache = 内存 60%
  • 合理复合索引
  • 慢查询监控

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

  • MongoDB 版本
  • 单机 / 副本集
  • 数据量 & QPS
  • 主要读还是写

我可以直接帮你写一套针对性的 mongod.conf 和索引方案。

0 踩