Debian系統MongoDB性能優化指南
硬件配置
操作系統設置
/etc/default/grub
,添加GRUB_CMDLINE_LINUX_DEFAULT="quiet numa=off transparent_hugepage=never"
,更新GRUB(sudo update-grub
)并重啟,避免內存分配碎片化。/etc/sysctl.conf
,增加文件描述符限制(fs.file-max = 655360
)、內存映射限制(vm.max_map_count = 262144
),優化TCP緩沖(net.core.rmem_max = 16777216
、net.core.wmem_max = 16777216
),提升系統吞吐量。vm.swappiness
(設為10-30),減少內存數據換出頻率。編輯/etc/mongod.conf
(MongoDB主配置文件),調整以下關鍵參數:
存儲引擎配置
storage.wiredTiger.collectionConfig.blockCompressor: snappy
(或zlib
,但snappy
對CPU消耗更低)。網絡配置
net.bindIp: 0.0.0.0
(允許遠程訪問,生產環境需限制為特定IP);設置端口:net.port: 27017
(默認端口,可根據需求修改)。net.maxIncomingConnections: 10000
(適應高并發場景,避免連接拒絕)。操作分析(慢查詢監控)
operationProfiling.mode: slowOp
(記錄執行時間超過slowOpThresholdMs
(默認100ms)的查詢);或operationProfiling.mode: all
(記錄所有查詢,用于詳細分析)。operationProfiling.slowOpThresholdMs: 100
(根據業務需求調整,如高頻小查詢可設為50ms)。復制集與分片
replication.replSetName: "rs0"
(啟用復制集,提高數據冗余和讀取性能,讀請求可分散到從節點)。sharding.clusterRole: shardsvr
(用于分片集群的節點,水平擴展數據存儲,解決單節點數據量過大問題)。創建合適索引
db.users.createIndex({username: 1})
,1
表示升序,-1
表示降序)。db.orders.createIndex({customer_id: 1, order_date: -1})
),優化排序和范圍查詢性能。db.products.createIndex({category: 1, price: 1})
,查詢{category: "electronics", price: {$lt: 1000}}
時無需訪問文檔)。索引維護
explain()
方法(如db.users.find({username: "john"}).explain("executionStats")
),查看索引使用情況(winningPlan
中的inputStage.stage
應為IXSCAN
,表示使用了索引)。reIndex()
(如db.users.reIndex()
),清理碎片化索引,提升查詢速度。查詢語句優化
db.users.find({username: "john"}, {name: 1, email: 1, _id: 0})
),減少網絡傳輸和內存占用。limit()
(如db.orders.find().sort({order_date: -1}).limit(10)
),避免全表掃描。db.users.updateMany({status: "inactive"}, {$set: {status: "deleted"}})
),減少鎖競爭和IO開銷。批量操作
bulkWrite()
方法(如db.products.bulkWrite([{insertOne: {...}}, {updateOne: {...}}])
),減少網絡往返次數,提升寫入性能。自帶工具
mongostat
:實時監控數據庫操作(如讀寫次數、延遲、鎖等待),命令:mongostat --host localhost --port 27017 --verbose
。mongotop
:查看熱點表(按集合統計讀寫時間),命令:mongotop --host localhost --port 27017
。systemLog.verbosity: 2
),分析慢查詢和錯誤信息。第三方工具
分片與復制集擴展
user_id
、order_date
)分片,將數據分布到多個節點,提升讀寫性能和可擴展性。rs.initiate({_id: "rs0", members: [{_id: 0, host: "mongo1:27017"}, {_id: 1, host: "mongo2:27017"}, {_id: 2, host: "mongo3:27017"}]})
),提高數據冗余和讀取性能(讀請求可分散到從節點)。版本升級