1. 存儲層:使用SSD替代傳統機械硬盤
SSD的高速隨機讀寫性能可顯著降低MongoDB的I/O延遲,尤其適合高并發的讀寫場景。建議選擇NVMe協議的SSD,其吞吐量和延遲更優。
2. 內存:增加物理內存并合理分配WiredTiger緩存
MongoDB依賴內存緩存數據和索引,建議將服務器總內存的**50%-70%**分配給WiredTiger引擎(通過storage.wiredTiger.engineConfig.cacheSizeGB
配置)。例如,8GB內存的服務器可設置為5-6GB。
3. CPU:選擇多核處理器提升并發處理能力
MongoDB是CPU密集型應用,多核CPU可并行處理查詢和寫入請求。建議選擇4核及以上的處理器,如Intel至強或AMD EPYC系列。
4. 操作系統內核參數優化
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
/etc/security/limits.conf
,添加:mongod soft nofiles 64000
mongod hard nofiles 64000
noop
或deadline
調度算法(通過echo noop | sudo tee /sys/block/sda/queue/scheduler
設置)。1. 確認使用WiredTiger存儲引擎
WiredTiger是MongoDB的默認高性能存儲引擎,支持壓縮和緩存優化。在/etc/mongod.conf
中確認:
storage:
engine: wiredTiger
2. 調整WiredTiger緩存大小
根據服務器內存情況,設置合理的緩存大?。ㄈ?GB內存設置為6GB):
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 6
3. 優化日志與journal參數
logRotate: reopen
(默認開啟)。commitIntervalMs
(默認100ms)可提高數據持久性,但會增加I/O壓力。根據業務需求調整(如10-50ms)。4. 增加連接數限制
修改net.maxIncomingConnections
(默認10000),根據并發連接數需求設置為5000-10000:
net:
maxIncomingConnections: 5000
1. 索引優化:創建高效索引
createIndex({ username: 1 })
(1表示升序)。{ status: 1, created_at: -1 }
),注意索引字段順序(匹配查詢條件的順序)。db.collection.stats()
檢查未使用的索引并刪除。2. 查詢優化:減少資源消耗
find({ status: "active" }, { name: 1, email: 1, _id: 0 })
,避免返回整個文檔。explain("executionStats")
分析查詢計劃,確保查詢使用了索引。3. 批量操作與分頁
bulkWrite()
替代單條操作,減少網絡往返次數。skip(10000).limit(10)
),改用基于索引的分頁(如記錄上次查詢的_id
,下次查詢find({ _id: { $gt: lastId } }, { ... }).limit(10)
)。1. 使用內置工具監控性能
2. 分析慢查詢日志
開啟慢查詢日志(operationProfiling.mode: slowOp
,slowOpThresholdMs: 100
),通過db.getProfilingLevel()
和db.system.profile.find()
查看慢查詢詳情,針對性優化。
3. 第三方監控工具
使用Prometheus+Grafana或Percona Monitoring and Management(PMM)監控MongoDB的性能指標(如CPU、內存、磁盤I/O、連接數),實現可視化預警。
通過以上多層優化策略,可有效解決CentOS環境下MongoDB的性能瓶頸。需注意的是,優化過程應結合業務場景和實際監控數據,逐步調整并驗證效果。