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.engineConfig.cacheSizeGB(根据服务器内存设置,如8GB内存可设为4-6GB),平衡内存使用与性能。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"}]})),提高数据冗余和读取性能(读请求可分散到从节点)。版本升级