在 Debian 上优化 MongoDB,通常可以从系统层面、MongoDB 配置、索引与查询、存储与架构几个维度来做。下面按实战优先级给你一份比较完整的优化清单。
mkfs.xfs /dev/sdX
MongoDB 官方强烈建议关闭 THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(Debian):
# /etc/rc.local 或 systemd 服务
编辑 /etc/security/limits.conf:
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
sysctl vm.swappiness=1
路径一般为:
/etc/mongod.conf
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 8 # 物理内存的 50%~70%
⚠️ 不要超过可用内存
systemLog:
verbosity: 0
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
net:
port: 27017
bindIp: 0.0.0.0 # 生产建议限定 IP
maxIncomingConnections: 65536
db.orders.createIndex({ user_id: 1, created_at: -1 })
用 explain 分析:
db.orders.find({ user_id: 123 }).explain("executionStats")
关注:
COLLSCAN ❌IXSCAN ✅只查索引字段:
db.orders.find({ user_id: 1 }, { user_id: 1, _id: 0 })
db.orders.insertOne(doc, { w: 1, j: true })
高吞吐场景可:
{ w: 0 } // 不推荐生产
db.orders.insertMany(docs)
readPreference=secondary
500GB 或高并发
db.serverStatus()
db.stats()
db.currentOp()
db.runCommand({ compact: "orders" })
mongostatmongotopsystemd 管理 mongod✅ 关闭 THP
✅ 调整 ulimit
✅ 合理 cacheSizeGB
✅ 建索引 + explain
✅ 慢查询日志
✅ 副本集
✅ 监控
如果你愿意,可以告诉我:
我可以给你针对性优化方案。