以下是提升Ubuntu上MongoDB配置性能的关键措施:
一、硬件与系统优化
- 使用SSD存储:显著降低I/O延迟,提升读写速度。
- 增加内存:确保服务器有足够内存,建议将70%-80%物理内存分配给MongoDB(通过
storage.wiredTiger.engineConfig.cacheSizeGB设置)。 - 关闭非必要服务:如防火墙、SELinux,减少系统负载。
二、MongoDB配置优化
- 调整存储引擎参数:
- 编辑
/etc/mongod.conf,设置storage.wiredTiger.engineConfig.cacheSizeGB为服务器内存的50%-70%。 - 启用压缩(如
snappy)减少网络传输量:setParameter: { wiredTigerCollectionBlockCompressor: snappy }。
- 编辑
- 优化网络设置:调整
net.maxIncomingConnections和net.maxOutgoingConnections以适应高并发。 - 开启操作分析:通过
operationProfiling监控慢查询(slowOpThresholdMs设置阈值)。
三、索引优化
- 精准创建索引:为高频查询字段创建单字段或复合索引,避免全表扫描。
// 示例:为查询字段创建索引 db.users.createIndex({ username: 1, age: -1 }); - 使用覆盖索引:确保查询仅通过索引获取数据,减少磁盘访问。
- 定期维护索引:删除冗余索引,使用
reIndex()重建碎片化索引。
四、查询与架构优化
- 优化查询语句:
- 使用
explain()分析查询计划,避免全表扫描。 - 采用分页(
skip()+limit())处理大数据集。
- 使用
- 分片与副本集:
- 大数据量场景使用分片(Sharding)水平扩展。
- 部署副本集(Replica Set)提升读取性能和数据冗余。
五、监控与维护
- 使用监控工具:
- 自带工具:
mongostat、mongotop监控实时性能。 - 第三方工具:Prometheus+Grafana实现可视化监控。
- 自带工具:
- 定期备份:通过
mongodump/mongorestore定期备份数据。
六、系统级调优
- 调整内核参数:
- 降低
vm.swappiness(如设为10)减少交换。 - 禁用透明大页(THP):
echo never > /sys/kernel/mm/transparent_hugepage/enabled。
- 降低
- 文件描述符限制:在
/etc/security/limits.conf中增加MongoDB进程的nofile限制。
注意:所有优化前需在测试环境验证,避免影响生产环境稳定性。
参考来源:[1,2,3,4,5,6,8,9,10,11]