centos上mongodb性能调优
小樊
36
2025-08-30 17:41:55
一、硬件与系统配置优化
- 硬件升级:使用SSD替代传统硬盘,提升I/O性能;增加内存,建议至少分配服务器总内存的一半给MongoDB,用于缓存数据和索引。
- 系统参数调整:关闭透明大页(THP),修改内核参数如
vm.swappiness=1
减少内存交换;优化磁盘调度算法为deadline
或noop
。
二、MongoDB配置优化
- 存储引擎设置:确保使用WiredTiger存储引擎,配置缓存大小(
storage.wiredTiger.engineConfig.cacheSizeGB
),建议设置为可用内存的50%-80%。
- 日志与网络优化:降低日志级别为
warning
或error
;增加网络缓冲区大小(net.maxIncomingConnections
),启用TCP优化参数(tcpNoDelay
等)。
三、索引优化
- 创建高效索引:为高频查询字段创建单字段或复合索引,确保索引覆盖查询字段(覆盖索引),避免全表扫描。
- 索引维护:定期使用
db.collection.getIndexes()
检查冗余索引,删除不再使用的索引;对频繁更新的集合定期重建索引。
四、查询优化
- 精简查询逻辑:使用投影(
{field: 1}
)限制返回字段,避免传输冗余数据;将$match
前置到聚合管道,减少中间结果集。
- 分页优化:大数据量分页优先使用
_id
范围查询替代skip
,避免性能下降。
五、分片与副本集策略
- 分片键选择:选择高基数、低更新频率的字段作为分片键,确保数据均匀分布,避免数据倾斜。
- 副本集配置:启用副本集实现读写分离,从节点处理读请求,减轻主节点压力。
六、监控与维护
- 工具使用:通过
mongostat
、mongotop
监控实时性能,或使用Prometheus+Grafana进行可视化监控。
- 慢查询分析:开启慢查询日志(
operationProfiling.mode=slowOp
),分析并优化低效查询。
- 定期维护:备份数据,清理无用索引和数据,定期更新MongoDB至最新版本以获取性能优化。