1. 硬件基礎優化
2. MongoDB配置文件調整(/etc/mongod.conf)
storage.wiredTiger.engineConfig
下設置cacheSizeGB
,值為系統內存的50%-75%(如cacheSizeGB: 8
)。此參數決定了MongoDB可用的內存緩存,直接影響查詢性能。operationProfiling
下設置mode: "slowOp"
,并指定slowOpThresholdMs
(如slowOpThresholdMs: 100
,單位毫秒)。慢查詢日志會記錄執行時間超過閾值的查詢,幫助定位性能瓶頸。net.maxIncomingConnections
(如maxIncomingConnections: 2000
),根據應用并發需求增加最大入站連接數,避免連接數過多導致性能下降。3. 索引優化
db.users.createIndex({email: 1})
),單字段索引適用于簡單查詢;復合索引(如db.orders.createIndex({customer_id: 1, order_date: -1})
)適用于多條件查詢,能大幅提升范圍查詢和排序性能。db.products.find({category: "electronics"}, {name: 1, price: 1})
),避免回表操作(從磁盤讀取完整文檔),減少I/O開銷??赏ㄟ^explain("executionStats")
查看查詢是否使用了覆蓋索引。db.users.getIndexes()
),刪除未使用或冗余的索引。reindex()
命令重建碎片化索引(如db.large_collection.reIndex()
),保持索引的高效性。4. 查詢語句優化
db.users.find({age: {$gt: 18}}, {name: 1, age: 1, _id: 0})
),避免傳輸整個文檔,降低網絡帶寬消耗。skip()
和limit()
實現分頁(如db.products.find().skip(20).limit(10)
),避免一次性返回大量數據導致內存溢出。db.users.find({email: "test@example.com"})
,其中email
有索引),可通過explain("executionStats")
查看查詢計劃,確認是否使用了索引。match
、group
、sort
)組合成一個聚合管道(如db.sales.aggregate([{match: {year: 2024}}, {group: {_id: "$product", total: {$sum: "$amount"}}}])
),減少中間結果的讀寫次數,提高查詢效率。5. 監控與診斷
mongostat
可實時查看數據庫操作的QPS(每秒查詢數)、延遲等指標;mongotop
可查看各個集合的讀寫時間分布,快速定位慢查詢集合。db.adminCommand({getLog: "slowops"})
查看慢查詢詳情,結合explain()
分析查詢計劃,優化慢查詢語句。6. 分片與副本集優化(針對大規模數據)
user_id
分片),提高查詢和寫入的橫向擴展能力。適用于數據量超過單機內存容量的場景(如TB級數據)。