在 Linux 上优化 MongoDB 性能,通常从系统层面、MongoDB 配置、存储与索引、监控几个方面入手。下面给你一份较实用的优化清单(适用于大多数生产环境)。
MongoDB 官方强烈建议关闭 THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(CentOS/RHEL):
# /etc/rc.d/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
MongoDB 需要大量文件描述符和进程数:
# /etc/security/limits.conf
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
echo noop > /sys/block/sda/queue/scheduler
避免 MongoDB 被 swap:
sysctl -w vm.swappiness=1
storage:
dbPath: /data/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 8 # 建议为物理内存的 50%~70%
collectionConfig:
blockCompressor: snappy
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27017
bindIp: 0.0.0.0
maxIncomingConnections: 65536
db.collection.insert(doc, { writeConcern: { w: 1 } })
{ w: "majority", j: true }
bulkWrite()
insertMany()
db.users.createIndex({ username: 1 })
db.users.find({ age: 30 }).explain("executionStats")
db.collection.getIndexes()
db.serverStatus()
db.currentOp()
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
mongostatmongotop| 问题 | 可能原因 |
|---|---|
| CPU 高 | 缺索引 / 聚合复杂 |
| 磁盘 IO 高 | journal / 写放大 |
| 内存高 | cacheSize 设置过大 |
| 延迟高 | 网络 / 锁 |
如果你能告诉我:
我可以给你更针对性的配置示例。