Linux下MongoDB性能提升策略
setParameter)充分利用CPU核心,避免单核瓶颈。storage.wiredTiger.engineConfig.cacheSizeGB设置为服务器物理内存的50%-70%(需预留内存给系统及其他应用),避免过大导致内存溢出或过小导致频繁磁盘交换。vm.swappiness=10(默认60),减少系统在内存不足时使用Swap的概率,避免因磁盘交换导致的性能骤降;echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled永久关闭;vm.overcommit_memory=1,允许内核超额分配内存,避免因内存分配失败导致的进程崩溃。info或warning,减少不必要的日志记录对磁盘I/O的影响;net.maxIncomingConnections(默认10000),避免过多连接导致资源耗尽。username、order_id),避免全表扫描。使用db.collection.createIndex({ field: 1 })创建升序索引,{ field: -1 }创建降序索引。{ status: 1, create_time: -1 }),创建复合索引可提升查询效率。注意字段顺序:将选择性高(过滤后剩余文档少)、查询频率高的字段放在前面。explain()方法分析查询计划,确认是否使用了索引(winningPlan中包含IXSCAN)。避免索引失效的场景(如使用$or时未对所有条件建索引、使用函数或类型转换导致索引无法命中)。db.collection.reIndex()重建碎片化索引,提升索引查询效率;删除未使用的索引(通过db.collection.aggregate([{ $indexStats: {} }])查看索引使用情况),减少写入开销。$where(JavaScript执行慢)、$all(全数组匹配)等低效操作符;尽量使用$in、$gt、$lt等高效操作符。projection参数只返回需要的字段(如db.users.find({}, { name: 1, age: 1 })),减少数据传输量;使用limit()限制返回结果数量(如db.orders.find().limit(100)),避免一次性返回大量数据。bulkWrite()进行批量插入、更新(如db.products.bulkWrite([{ insertOne: { document: { name: "Product1" } } }, { updateOne: { filter: { _id: 1 }, update: { $set: { price: 100 } } } }])),减少与数据库的通信次数,提升处理效率。user_id、order_date),避免数据倾斜(如避免使用单调递增的字段作为分片键)。mongostat监控操作速率、mongotop监控集合级读写时间)或第三方工具(Prometheus+Grafana可视化监控)实时跟踪性能指标(如查询响应时间、磁盘I/O、内存使用率)。operationProfiling.slowOpThresholdMs=100,单位毫秒),定期分析慢查询日志,找出性能瓶颈(如未使用索引的查询、复杂聚合操作),针对性优化。