1. 選擇并優化WiredTiger存儲引擎
MongoDB 3.2+默認使用WiredTiger引擎(支持文檔級并發與壓縮),是CentOS環境下最優選擇。配置項需重點關注:
snappy
(平衡性能與壓縮比)、zlib
(高壓縮比,高CPU負載)或zstd
(更高壓縮比,低延遲)算法減少磁盤占用。示例配置:storage:
engine: wiredTiger
wiredTiger:
engineConfig:
collectionConfig:
blockCompressor: snappy # 根據業務需求選擇
cacheSizeGB
參數設置為服務器總內存的50%-75%(避免占用過多內存導致系統或其他應用饑餓)。例如,8GB內存服務器可設置為6GB:storage:
wiredTiger:
engineConfig:
cacheSizeGB: 6
2. 優化數據文件存儲路徑與權限
/var/lib/mongo
遷移至更大或更高性能的磁盤(如/mnt/data
),避免根分區空間不足。步驟:停止MongoDB→創建新目錄→修改所有者→復制數據→修改配置文件dbPath
→重啟服務。mongod
)需對新數據目錄有讀寫權限:sudo chown -R mongod:mongod /mnt/data
3. 定期執行磁盤空間清理
compact
命令整理集合碎片并釋放未使用空間(WiredTiger下有效),需注意該操作會鎖定集合,建議在低峰期執行:use your_database;
db.runCommand({compact: "your_collection"});
db.dropDatabase()
);定期執行db.collection.stats()
監控集合大小,及時清理膨脹數據。4. 優化索引設計
user_id
、order_date
)創建單字段索引;為多條件查詢創建復合索引(如{user_id: 1, order_date: -1}
),避免全表掃描。db.collection.find({status: "active"}, {name: 1, email: 1}).explain("executionStats")
),減少磁盤IO。db.collection.aggregate([{listIndexes: 1}, {cursor: {batchSize: 0}}])
查看),合并碎片化索引(compact
命令或重建索引)。5. 硬件配置優化
echo never > /proc/sys/vm/transparent_hugepage/enabled
)、調整文件描述符限制(sudo vi /etc/security/limits.conf
添加mongod hard nofile 64000
)。6. 分片與復制集擴展
user_id
分片),提高存儲容量與讀寫性能。需提前規劃分片鍵(避免數據傾斜)。7. 監控與調優
mongostat
監控每秒操作數、mongotop
監控集合級IO耗時、explain()
分析查詢執行計劃(判斷是否使用索引)。