MongoDB在Debian上的性能調優策略
/etc/default/grub,添加GRUB_CMDLINE_LINUX_DEFAULT="quiet numa=off transparent_hugepage=never";更新GRUB配置(sudo grub-mkconfig -o /boot/grub/grub.cfg)并重啟系統。也可通過/etc/rc.local文件或運行時命令(echo never > /sys/kernel/mm/transparent_hugepage/enabled)臨時關閉。/etc/security/limits.conf,增加MongoDB用戶的文件描述符限制(如mongod hard nofile 64000、mongod soft nofile 64000),避免高并發時連接數受限。/etc/mongod.conf中的storage.wiredTiger.engineConfig.cacheSizeGB參數(建議設置為物理內存的50%-70%,避免占用過多內存導致系統交換)。/etc/mongod.conf中的net.bindIp(如0.0.0.0允許遠程訪問,或指定具體IP增強安全性);確認net.port(默認27017)未被其他服務占用。journal.enabled: true(啟用日志,確保數據持久性);調整operationProfiling.mode為slowOp(記錄慢查詢,默認閾值100ms),幫助定位性能瓶頸。systemLog.path(如/var/log/mongodb/mongod.log)指定日志路徑;定期清理或輪轉日志文件(如使用logrotate),避免日志過大占用磁盤空間。db.collection.createIndex({ field1: 1 }));對多字段查詢使用復合索引(如db.collection.createIndex({ field1: 1, field2: -1 })),注意索引順序需匹配查詢條件。explain("executionStats")方法分析查詢執行計劃(如db.collection.find({ field1: 1 }).explain("executionStats")),確認索引是否被命中;定期使用db.collection.validate()檢查索引碎片,必要時重建索引(db.collection.reIndex())。db.collection.find({ field1: 1 }, { _id: 0, field1: 1 })),避免傳輸冗余數據(如_id字段)。/abc/)或無索引的$where操作符,這類操作會導致全表掃描,嚴重影響性能。$match階段放在聚合管道前面(盡早過濾數據),減少后續階段的處理量;合并多個操作(如$group與$sort),減少中間文檔生成。rs.initiate({ _id: "rs0", members: [{ _id: 0, host: "mongo1:27017" }, { _id: 1, host: "mongo2:27017" }] })),讀操作可指向從節點(readPreference: secondary),減輕主節點壓力。sh.enableSharding("mydatabase")),并對分片鍵(如user_id)合理選擇(避免數據傾斜),提高寫入和查詢的可擴展性。mongostat監控每秒查詢次數、插入/更新/刪除操作數等實時指標;使用mongotop查看各集合的讀寫時間分布,快速定位熱點集合。db.setProfilingLevel(1, 50),記錄超過50ms的操作),定期分析慢查詢日志,針對性優化查詢語句或索引。