MongoDB在Debian上的性能调优技巧
性能调优的底层支撑是硬件配置,需优先满足以下要求:
sudo ufw disable)、禁用SELinux(若开启),减少系统负载;/etc/security/limits.conf,增加MongoDB用户的文件描述符限制(如mongod hard nofile 64000),避免高并发时连接数受限;vm.swappiness=1(sudo sysctl vm.swappiness=1),减少内存不足时的磁盘交换。编辑/etc/mongod.conf(Debian默认路径),关键参数设置如下:
storage.wiredTiger.engineConfig.cacheSizeGB),建议设置为物理内存的50%-70%(如8GB内存设为4GB);0.0.0.0(允许远程访问),端口保持默认27017(或自定义);operationProfiling.mode: slowOp),设置阈值为50ms(operationProfiling.slowOpThresholdMs: 50),便于定位性能瓶颈;replication.replSetName: rs0,后续通过rs.initiate()初始化副本集。索引是提升查询性能的核心手段:
db.collection.createIndex({ field1: 1 }));db.collection.createIndex({ field1: 1, field2: -1 })),注意字段顺序(匹配查询条件优先);db.collection.createIndex({ field1: 1, field2: 1 })),避免回表查询;explain("executionStats")查看查询计划,确认索引是否被命中(winningPlan.inputStage.stage应为IXSCAN)。db.collection.find({ field1: 1 }, { _id: 0, field1: 1 })),减少网络传输;$where(JavaScript执行慢)和正则表达式(如/^prefix/),优先用索引字段过滤;bulkWrite()替代单条插入/更新(如批量插入1000条数据),减少网络往返次数;$match放在管道开头(提前过滤数据),减少后续阶段的处理量。rs.initiate({ _id: "rs0", members: [{_id: 0, host: "mongo1:27017"}, {_id: 1, host: "mongo2:27017"}, {_id: 2, host: "mongo3:27017"}] })),提升读取性能(从节点分担读请求)和数据冗余;user_id)分片(sh.shardCollection("db.collection", { user_id: 1 })),将数据分散到多个节点,提高写入和读取的横向扩展能力。mongostat(监控每秒查询/写入次数、延迟)、mongotop(查看热点集合的读写时间)实时监控性能;db.setProfilingLevel(1, 50)开启慢查询记录,用db.system.profile.find()查看详情;mongodump(逻辑备份)或mongodump --archive(二进制备份)定期备份数据,避免数据丢失;compact命令压缩集合(如db.runCommand({ compact: 'collection_name' })),回收磁盘空间;