- 首页 >
- 问答 >
-
云计算 >
- centos mongodb性能调优实战
centos mongodb性能调优实战
小樊
38
2025-11-17 19:41:41
CentOS 上 MongoDB 性能调优实战
一 环境与硬件基线
- 存储与文件系统:优先使用 SSD/NVMe,数据盘挂载选项加入 noatime,降低元数据写放大;如为机械盘,可评估合适的 I/O 调度策略(如 deadline/noop)。
- 内存与 CPU:为 WiredTiger 缓存预留充足内存,结合业务并发选择 多核 CPU。
- 架构:读写分离与扩展优先采用 副本集;超大数据量或高并发写入再考虑 分片,并设计高基数、低更新频率的分片键以避免热点。
- 基础检查:确认数据盘剩余空间充足、文件系统无错误、时钟同步(NTP)正常。
二 操作系统与内核参数
- 资源限制:提升文件描述符与进程数上限,建议设置为 100000 以上(示例为 64000,可按需上调)。
- 透明大页 THP:禁用 Transparent Huge Pages,减少内存管理抖动与延迟。
- 磁盘与挂载:数据盘使用 noatime 挂载选项,减少不必要的访问时间更新。
- 示例操作(需重启或重新登录生效):
- 资源限制(/etc/security/limits.conf 或 /etc/security/limits.d/99-mongodb.conf)
- mongodb soft nofile 100000
- mongodb hard nofile 100000
- mongodb soft nproc 100000
- mongodb hard nproc 100000
- 禁用 THP(/usr/lib/systemd/systemd-hugepages.service 或 grub 内核参数)
- echo never > /sys/kernel/mm/transparent_hugepage/enabled
- echo never > /sys/kernel/mm/transparent_hugepage/defrag
- 挂载选项(/etc/fstab)
- /dev/xvdb /data ext4 defaults,noatime 0 0
- 说明:上述为通用起点,生产环境请结合监控逐步微调。
三 MongoDB 配置优化
- 关键配置(/etc/mongod.conf,示例为 YAML):
- 存储与缓存:WiredTiger 为默认引擎;将 storage.wiredTiger.engineConfig.cacheSizeGB 设为物理内存的约 50%–75%(需为实例独占内存);开启压缩(如 snappy)以节省空间、适度增加 CPU 使用。
- 日志:启用 journal(生产建议保持开启);可按需调整 storage.wiredTiger.journal.commitIntervalMs(如 100 ms)以在吞吐与持久性间平衡。
- 网络与访问:仅绑定内网地址(如 net.bindIp: 127.0.0.1,<内网IP>),端口 27017;开启鉴权(security.authorization: enabled)。
- 复制与分片:副本集设置 replication.replSetName;分片设置 sharding.clusterRole。
- 示例片段:
- storage:
- engine: wiredTiger
- wiredTiger:
- engineConfig:
- cacheSizeGB: 24
- collectionConfig:
- journal:
- enabled: true
- commitIntervalMs: 100
- net:
- bindIp: 127.0.0.1,10.0.1.10
- port: 27017
- replication:
- sharding:
- security:
- 副本集与分片:合理设置 oplog 大小(常见为可用磁盘空间的约 5%,写入密集或窗口期长的业务可适当增大);分片键选择高基数、低更新频率、利于范围/均衡查询的字段。
四 索引与查询优化
- 索引策略:为高频查询条件建立 单字段/复合索引;优先设计 覆盖索引 以减少回表;避免冗余与重复索引;定期审查与清理无用索引。
- 查询写法:使用 投影 仅返回必要字段;避免 $or 导致索引失效;大数据集分页建议使用 limit/skip 或基于游标的方案,控制单次返回量。
- 执行计划与诊断:使用 explain(“executionStats”) 分析扫描方式、索引命中与执行时间;结合 profiling 定位慢查询并迭代优化。
五 监控 维护与压测
- 监控与告警:使用 mongostat、mongotop 观察吞吐、连接、锁、页错误与读写耗时;结合 Prometheus + Grafana 搭建可视化与阈值告警。
- 日志与维护:启用并轮转日志,防止日志无限增长;对高写入/更新频繁的集合,按需执行 reIndex 或重建碎片化严重的索引;定期清理无用数据,控制集合与索引规模。
- 变更与压测:任何参数调整先在 测试环境验证,评估对延迟、吞吐与稳定性的影响,再灰度上线;上线后持续回归关键查询与基线压测。