温馨提示×

MongoDB在CentOS上如何调优

小樊
47
2025-08-12 15:23:14
栏目: 云计算

一、硬件与操作系统优化

  • 使用SSD:提升I/O性能,降低延迟。
  • 关闭传输页缓存:减少磁盘I/O压力,通过修改系统参数实现。
  • 优化内核参数
    • 调整vm.swappiness(建议设为10),减少交换空间使用。
    • 关闭透明大页(THP),通过echo never > /proc/sys/vm/transparent_hugepage/enabled设置。
    • 增加文件描述符限制,修改/etc/security/limits.conf

二、MongoDB配置优化

  • 调整WiredTiger缓存
    • /etc/mongod.conf中设置storage.wiredTiger.engineConfig.cacheSizeGB,建议为服务器内存的50%-70%。
  • 日志与存储优化
    • 启用日志轮转(Log Rotation),配置systemLog.logRotatereopenreindex
    • 调整journal日志刷新参数commitIntervalMs(默认100ms)和syncPeriodSecs(默认10s),平衡性能与数据安全。
  • 连接数优化
    • 增加net.maxIncomingConnectionsnet.maxOutgoingConnections以适应高并发。

三、索引与查询优化

  • 创建高效索引
    • 为高频查询字段创建单字段或复合索引,使用db.collection.createIndex()
    • 通过explain("executionStats")分析查询计划,避免全表扫描。
  • 优化查询语句
    • 使用投影(projection)仅返回必要字段,减少数据传输。
    • 采用分页查询(limit()+skip()),避免一次性返回大量数据。

四、数据库设计与维护

  • 合理设计Schema
    • 避免过度规范化,适当冗余数据以减少JOIN操作。
    • 根据访问模式选择嵌入式文档或引用式文档。
  • 定期维护
    • 清理无用索引,使用db.collection.dropIndex()
    • 监控索引使用情况,删除低效索引。

五、监控与调优工具

  • 使用自带工具
    • mongostat:实时监控数据库状态(如QPS、连接数)。
    • mongotop:跟踪集合级读写耗时。
  • 第三方工具
    • Percona Monitoring and Management (PMM):提供更详细的性能分析和诊断。

六、其他高级优化

  • 分片与副本集:对于大规模数据,使用分片分散负载,副本集提升可用性。
  • 内存管理
    • 通过systemd限制MongoDB内存使用,如systemctl set-property mongod MemoryLimit

0