下面从部署架构、系统层面、MongoDB 配置、索引与查询、运维监控几个维度,系统讲一下 Linux 下 MongoDB 的优化思路(以 MongoDB 4.x / 5.x / 6.x 通用为主)。
MongoDB 官方强烈建议关闭 THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(示例 CentOS/RHEL):
# /etc/rc.local 或 systemd 服务
/dev/sdb /data xfs defaults,noatime,nodiratime 0 0
# 增加文件描述符
ulimit -n 64000
# /etc/security/limits.conf
mongod soft nofile 64000
mongod hard nofile 64000
# 网络
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
storage:
dbPath: /data/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 8 # 建议 = 物理内存 * 0.5~0.7
collectionConfig:
blockCompressor: snappy
⚠️ 不要设太大,预留系统内存
storage:
journal:
commitIntervalMs: 100 # 默认100,高吞吐可调大
replication:
oplogSizeMB: 20480 # 高写入场景
net:
port: 27017
bindIp: 0.0.0.0
maxIncomingConnections: 65536
db.orders.createIndex({ user_id: 1, created_at: -1 })
db.collection.find({...}).explain("executionStats")
关注:
COLLSCAN ❌IXSCAN ✅totalKeysExamined vs totalDocsExamineddb.collection.insertMany(docs)
writeConcern: { w: 1, j: false }
(非核心数据可放宽)
适合:
mongostatmongotopdb.serverStatus()| 问题 | 原因 |
|---|---|
| CPU 高 | 缺索引 / 聚合重 |
| 磁盘 IO 高 | 内存不足 |
| 延迟高 | 锁 / 慢查询 |
| 写入慢 | journal / 副本同步 |
如果你愿意,可以告诉我:
我可以直接帮你针对性调优配置。