在 Debian 上优化 MongoDB 配置,通常可以从系统层面、MongoDB 配置、存储与索引、监控与维护几个方面入手。下面按实操角度给你一套常见优化方案。
MongoDB 官方强烈建议关闭 THP,否则会导致延迟抖动。
sudo nano /etc/systemd/system/disable-thp.service
内容:
[Unit]
Description=Disable Transparent Huge Pages
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
启用:
sudo systemctl enable --now disable-thp
编辑:
sudo nano /etc/security/limits.conf
添加:
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
cat /sys/block/sda/queue/scheduler
SSD 建议:none 或 mq-deadline
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 建议为物理内存的 50%-70%
collectionConfig:
blockCompressor: snappy
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
net:
bindIp: 127.0.0.1,内网IP
port: 27017
maxIncomingConnections: 65536
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
cacheSizeGB 不要超过物理内存的 70%开启慢查询日志:
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
MongoDB 对磁盘 I/O 非常敏感,SSD 提升明显。
explain() 分析查询db.orders.createIndex({ user_id: 1, created_at: -1 })
写多读少场景,索引会增加写入成本。
replication:
replSetName: rs0
初始化:
rs.initiate()
mongostat
mongotop
grep "slow query" /var/log/mongodb/mongod.log
compact(谨慎使用)security:
authorization: enabled
如果你愿意,可以告诉我:
我可以给你一份针对性优化配置。