在 Debian 上调优 MongoDB,通常从系统层、MongoDB 配置、索引与查询、存储引擎、监控几个方面入手。下面按“实用优先”的方式给你一份调优清单。
编辑 /etc/sysctl.conf 或 /etc/sysctl.d/mongodb.conf:
vm.swappiness = 1
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
fs.file-max = 1000000
net.core.somaxconn = 4096
应用:
sysctl -p
MongoDB 需要大量 FD。
/etc/security/limits.conf:
mongodb soft nofile 1000000
mongodb hard nofile 1000000
或 systemd 中:
[Service]
LimitNOFILE=1000000
MongoDB 官方强烈建议关闭:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(Debian):
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'
配置文件通常在:
/etc/mongod.conf
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 物理内存的 50%–70%
collectionConfig:
blockCompressor: snappy
systemLog:
verbosity: 0
logRotate: reopen
net:
port: 27017
bindIp: 0.0.0.0
maxIncomingConnections: 65536
db.setProfilingLevel(1, 100) // 超过100ms记录
查看:
db.system.profile.find().sort({ts:-1}).limit(10)
db.orders.createIndex({ user_id: 1, created_at: -1 })
避免:
db.orders.find({user_id: 1}).explain("executionStats")
关注:
COLLSCAN(差)IXSCAN(好)高吞吐可放宽:
db.orders.insertOne(doc, { w: 1, j: false })
金融类建议:
{ w: "majority", j: true }
db.orders.insertMany(docs)
db.serverStatus()
db.stats()
db.currentOp()
iostat -x 1
htop
ntp 或 chrony你可以告诉我:
mongod --version)我可以直接给你一份可落地的配置文件 + 索引方案。