在 Debian 系统上优化 MongoDB,通常可以从操作系统层面、MongoDB 配置、硬件与存储、索引与查询、监控与维护几个方面入手。下面给你一套比较实用的优化思路(适用于 MongoDB 4.x / 5.x / 6.x / 7.x)。
编辑 /etc/sysctl.conf:
vm.swappiness = 1
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
net.core.somaxconn = 65535
应用:
sysctl -p
MongoDB 需要大量文件句柄。
/etc/security/limits.conf:
mongodb soft nofile 64000
mongodb hard nofile 64000
或 systemd 服务中:
[Service]
LimitNOFILE=64000
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
可写入开机脚本或 systemd。
推荐:
挂载选项示例(/etc/fstab):
defaults,noatime,nodiratime
/var/lib/mongodb # 数据
/var/log/mongodb # 日志
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 建议 = 内存的 50%(专用服务器)
⚠️ 不要超过物理内存的 60%
net:
port: 27017
bindIp: 0.0.0.0
maxIncomingConnections: 65536
systemLog:
verbosity: 0
quiet: false
生产环境避免 quiet: true
db.orders.createIndex({ user_id: 1, created_at: -1 })
db.orders.find({ user_id: 1 }).explain("executionStats")
关注:
IXSCAN(好)COLLSCAN(差)db.orders.find({}, { title: 1, price: 1 })
writeConcern: { w: "majority" }
readPreference: "secondary"
mongostat
mongotop
/var/log/mongodb/mongod.log
db.runCommand({ compact: "collection_name" })
| 问题 | 原因 |
|---|---|
| CPU 高 | 缺索引 / 聚合重 |
| 磁盘 IO 高 | 内存不足 |
| 延迟高 | 慢查询 |
| OOM | cacheSize 过大 |
如果你愿意,可以告诉我:
我可以直接给你针对性配置示例。