linux

MongoDB性能优化Linux技巧

小樊
41
2025-10-01 17:54:16
栏目: 云计算

1. 内存管理与WiredTiger缓存优化
MongoDB的性能高度依赖内存,尤其是WiredTiger存储引擎的缓存配置。需将storage.wiredTiger.engineConfig.cacheSizeGB设置为服务器物理内存的50%-70%(需预留内存给系统和其他进程),避免缓存过小导致频繁磁盘I/O。同时,通过vm.swappiness参数控制交换空间使用(建议设为5-10),减少内存不足时的swap操作;禁用透明大页面(THP),将/sys/kernel/mm/transparent_hugepage/enabled/sys/kernel/mm/transparent_hugepage/defrag设置为never,避免内存分配延迟。

2. 文件系统选择与挂载优化
优先使用XFS文件系统(MongoDB官方推荐),其高并发元数据处理能力和低延迟特性更适合大规模数据场景。若使用ext4,需优化挂载选项:noatime,nodiratime(禁用访问时间记录,减少元数据写入)、barrier=0(禁用写屏障,适用于有电池备份的RAID控制器)。XFS挂载时可添加allocsize=512m(预分配大块空间,减少碎片)、logbufs=8(增加日志缓冲区,提升写入效率)。

3. I/O调度器与内核参数调优
根据存储设备类型调整I/O调度器:SSD建议使用deadline调度器(平衡性能与一致性),通过echo deadline | sudo tee /sys/block/sdX/queue/scheduler设置,并添加udev规则持久化。内核参数方面,优化脏页写入(vm.dirty_ratio=10vm.dirty_background_ratio=5)减少I/O阻塞;禁用NUMA(numactl --interleave=all)避免内存访问不均导致的性能下降。

4. 磁盘布局与RAID配置
Journal日志数据目录使用单独物理卷(如将Journal挂载到/opt/mongodb/journal),减少数据盘I/O压力。生产环境推荐使用RAID 10(条带化+镜像),兼顾高IOPS与冗余,适合高并发写入场景;避免使用RAID 5(写入性能受奇偶校验影响)。

5. 系统资源限制调整
增加MongoDB进程的文件描述符限制(nofile)和进程数限制(nproc),编辑/etc/security/limits.conf添加:mongodb soft nofile 65536mongodb hard nofile 65536mongodb soft nproc 65536mongodb hard nproc 65536,避免因资源不足导致连接拒绝或性能下降。

6. 监控与慢查询分析
使用MongoDB内置工具mongostat(监控IOPS、延迟)、mongotop(分析集合级查询时间)实时监控性能;开启慢查询日志(operationProfiling.mode=slowOpoperationProfiling.slowOpThresholdMs=100),通过db.profile()查看慢查询详情,针对性优化索引或查询语句。

0
看了该问题的人还看了