選擇高性能文件系統
-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()
批量插入/更新,減少網絡往返和事務開銷。參考來源: