MongoDB在Ubuntu上的调优方法
ufw disable)、禁用SELinux(setenforce 0),减少系统资源消耗。/etc/systemd/system/disable-thp.service,内容如下:[Unit]
Description=Disable Transparent Huge Pages (THP)
[Service]
Type=simple
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 daemon-reload && sudo systemctl enable --now disable-thp.service启用。/etc/security/limits.d/mongodb.conf,增加以下内容(避免进程因资源不足被终止):mongod soft nproc 64000
mongod hard nproc 64000
mongod soft nofile 64000
mongod hard nofile 64000
cacheSizeGB为物理内存的50%-75%(如4GB内存可设为3-3.5GB):storage:
wiredTiger:
engineConfig:
cacheSizeGB: 3
operationProfiling监控慢查询(阈值设为100ms),帮助定位性能瓶颈:operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
journal.enabled: true(默认开启),提高数据持久性和崩溃恢复能力。bindIp为服务器IP(如bindIp: 192.168.1.100);限制maxIncomingConnections(如2000)避免连接数过多导致资源耗尽。db.users.createIndex({email: 1})),避免全表扫描。find({age: {$gt: 18}, gender: "male"})),创建复合索引db.users.createIndex({age: 1, gender: 1}),提高查询效率。explain("executionStats")查看查询计划,确认索引是否被命中(winningPlan.inputStage.stage应为IXSCAN):db.users.find({email: "test@example.com"}).explain("executionStats")
db.users.reIndex()),删除不再使用的索引(db.users.dropIndex("index_name"))。find({status: "active"})需为status创建索引)。find({age: {$gt: 18}}, {name: 1, age: 1, _id: 0})),减少数据传输量。skip()和limit()分页(如find().skip(20).limit(10)),避免一次性返回大量数据。insertMany()、updateMany()替代单条操作,减少网络开销。sh.shardCollection("db.users", {email: 1})),选择高基数的字段作为分片键。replication:
replSetName: "rs0"
然后初始化副本集(rs.initiate())。mongostat监控每秒操作数(如插入、查询)、mongotop查看集合级别的读写时间(如mongotop 5每5秒刷新一次)。mongodump(逻辑备份)和mongorestore(恢复)备份数据(如mongodump --out /backup/mongodb),防止数据丢失。