MongoDB 4.2及以上版本默认使用WiredTiger存储引擎(替代已弃用的MMAPv1),其支持文档级压缩和更好的内存管理,能显著减少存储空间占用并提升性能。可通过以下命令验证当前存储引擎:
db.adminCommand({getParameter: 1, storageEngine: 1})
若未使用WiredTiger,需修改配置文件/etc/mongod.conf,添加或修改以下内容:
storage:
engine: wiredTiger
修改后重启MongoDB服务使配置生效:sudo systemctl restart mongod。
WiredTiger支持Snappy(默认,平衡压缩率与CPU开销)、Zlib(高压缩率,高CPU消耗)等压缩算法,可根据业务需求调整。在/etc/mongod.conf中配置:
storage:
wiredTiger:
engineConfig:
collectionConfig:
blockCompressor: snappy # 或 zlib(高压缩场景)
启用压缩后,存储空间占用可减少约30%-50%(Snappy)或50%-70%(Zlib),但会增加少量CPU负载。
WiredTiger的缓存大小由cacheSizeGB参数控制,建议设置为系统内存的50%-80%(需预留足够内存给系统和其他应用)。在/etc/mongod.conf中修改:
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 根据服务器内存调整,如8GB内存可设为4-6GB
合理设置缓存能减少磁盘I/O,提升查询性能。
db.collection.createIndex({field: 1})),复合索引(db.collection.createIndex({field1: 1, field2: -1}))可优化多字段查询。db.collection.aggregate([{ $indexStats: {} }])查看索引使用情况,删除长期未使用的索引(db.collection.dropIndex("indexName")),减少存储空间占用。sh.shardCollection("dbName.collectionName", {shardKey: 1}))。db.runCommand({compact: 'collectionName'})。db.runCommand({repairDatabase: 1})。mongodump备份数据,再用mongorestore还原到新数据库,彻底整理数据文件并减少碎片。/etc/fstab中为MongoDB数据目录添加noatime选项(减少访问时间更新,降低磁盘I/O)。systemLog.path)会持续增长,需定期清理或归档(如使用logrotate工具)。mongostat(查看实时I/O)、mongotop(查看集合级读写时间)或第三方工具(如Percona PMM)监控存储性能,及时发现瓶颈。