1. 选择并优化WiredTiger存储引擎
MongoDB 3.2+默认使用WiredTiger引擎(支持文档级并发与压缩),是CentOS环境下最优选择。配置项需重点关注:
snappy(平衡性能与压缩比)、zlib(高压缩比,高CPU负载)或zstd(更高压缩比,低延迟)算法减少磁盘占用。示例配置:storage:
engine: wiredTiger
wiredTiger:
engineConfig:
collectionConfig:
blockCompressor: snappy # 根据业务需求选择
cacheSizeGB参数设置为服务器总内存的50%-75%(避免占用过多内存导致系统或其他应用饥饿)。例如,8GB内存服务器可设置为6GB:storage:
wiredTiger:
engineConfig:
cacheSizeGB: 6
2. 优化数据文件存储路径与权限
/var/lib/mongo迁移至更大或更高性能的磁盘(如/mnt/data),避免根分区空间不足。步骤:停止MongoDB→创建新目录→修改所有者→复制数据→修改配置文件dbPath→重启服务。mongod)需对新数据目录有读写权限:sudo chown -R mongod:mongod /mnt/data
3. 定期执行磁盘空间清理
compact命令整理集合碎片并释放未使用空间(WiredTiger下有效),需注意该操作会锁定集合,建议在低峰期执行:use your_database;
db.runCommand({compact: "your_collection"});
db.dropDatabase());定期执行db.collection.stats()监控集合大小,及时清理膨胀数据。4. 优化索引设计
user_id、order_date)创建单字段索引;为多条件查询创建复合索引(如{user_id: 1, order_date: -1}),避免全表扫描。db.collection.find({status: "active"}, {name: 1, email: 1}).explain("executionStats")),减少磁盘IO。db.collection.aggregate([{listIndexes: 1}, {cursor: {batchSize: 0}}])查看),合并碎片化索引(compact命令或重建索引)。5. 硬件配置优化
echo never > /proc/sys/vm/transparent_hugepage/enabled)、调整文件描述符限制(sudo vi /etc/security/limits.conf添加mongod hard nofile 64000)。6. 分片与复制集扩展
user_id分片),提高存储容量与读写性能。需提前规划分片键(避免数据倾斜)。7. 监控与调优
mongostat监控每秒操作数、mongotop监控集合级IO耗时、explain()分析查询执行计划(判断是否使用索引)。