选择高性能文件系统
-n size=64k
(优化元数据块大小),-d agcount=16
(增加并行写入组)。-b 4096
(与MongoDB默认页大小对齐)。挂载选项优化
noatime,nodiratime
(减少元数据写入),barrier=0
(提升SSD写入性能,需确保硬件支持)。allocsize=512m
(减少碎片),logbufs=8
(增大日志缓冲区)。内核参数调优
deadline
调度器(减少延迟),机械盘可考虑noop
。vm.dirty_ratio=10
,vm.dirty_background_ratio=5
(控制脏页写入比例)。vm.swappiness=5
(降低swap使用,优先利用内存)。echo never > /sys/kernel/mm/transparent_hugepage/enabled
(避免内存分配延迟)。缓存与内存管理
storage.wiredTiger.engineConfig.cacheSizeGB
为系统内存的50%-75%,避免过度占用内存。storage.journal.enabled
(确保数据一致性),合理设置journal.commitIntervalMs
(默认100ms,高负载可降低)。分片与副本集策略
数据模型优化
索引设计
db.collection.createIndex({field1: 1, field2: 1})
)。{status: 1, create_time: -1}
)。db.collection.reIndex()
重建碎片化索引,监控索引命中率(通过db.collection.stats()
)。查询语句优化
projection
指定返回字段,避免SELECT *
。limit()
限制结果集大小,分页查询优先使用skip()+limit()
或cursor
。explain()
分析查询计划,确保索引被命中。存储硬件选择
系统资源监控
iostat
、vmstat
监控磁盘I/O和内存使用,及时发现瓶颈。mongostat
、mongotop
分析数据库负载,定位慢查询或资源占用异常。压缩与归档
storage.wiredTiger.engineConfig.compression: snappy
),减少磁盘占用。批量操作与异步处理
bulkWrite()
批量插入/更新,减少网络往返和事务开销。参考来源: