下面从系统层面、MongoDB 配置层面、索引与查询层面、运维监控几个角度,系统讲一下在 Debian 上优化 MongoDB 的方法。
MongoDB 对文件句柄和线程数敏感。
# 查看限制
ulimit -n
建议:
# /etc/security/limits.conf
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
重启后生效。
MongoDB 官方明确建议关闭 THP。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(Debian):
# /etc/rc.local 或 systemd 中执行
mkfs.xfs /dev/sdb
mount /dev/sdb /var/lib/mongodb
避免 MongoDB 被 swap:
sysctl -w vm.swappiness=1
配置文件一般在:
/etc/mongod.conf
默认已是 WiredTiger,重点调缓存:
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 建议物理内存的 50%-70%
systemLog:
destination: file
logAppend: true
生产环境可关闭 verbose 日志。
net:
maxIncomingConnections: 65536
port: 27017
db.orders.createIndex({ user_id: 1, created_at: -1 })
查看慢查询:
db.setProfilingLevel(1, { slowms: 100 })
db.orders.find({ status: "paid" }).explain("executionStats")
关注:
COLLSCAN ❌IXSCAN ✅db.users.find({}, { name: 1, age: 1 })
减少网络与内存开销。
rs.status()
mongostat
mongotop
qr/qw(队列)faults(内存不足)res(内存占用)db.runCommand({ compact: "collectionName" })
| 问题 | 解决 |
|---|---|
| CPU 高 | 查慢查询、缺索引 |
| 内存高 | 调小 cacheSizeGB |
| 磁盘 IO 高 | SSD + 索引 |
| 写慢 | 批量写入、关 journal(不推荐) |
如果你愿意,可以告诉我:
我可以给你一份针对性优化配置。