1. 数据清理:删除无用数据释放空间
- 直接删除集合/文档:使用
db.collection.drop()命令快速删除不再需要的集合(包含所有文档和索引),或用db.collection.deleteMany({条件})删除符合条件的文档。注意:删除后空间不会立即释放,需后续操作回收。 - 定时任务自动清理:通过
cron设置定时任务,定期执行删除命令(如删除3个月前的历史消息):db.RawMessage.deleteMany({generatedTime: {$lte: new Date(Date.now() - 90 * 86400 * 1000)}})。 - TTL索引自动过期:为时间字段创建TTL索引,自动删除过期数据(如日志集合设置1年过期):
db.RawMessage.createIndex({"generatedTime": 1}, {expireAfterSeconds: 31536000})。TTL索引依赖后台线程每60秒执行一次,适合定期清理场景。
2. 空间回收:释放已删除数据占用的磁盘空间
- compact命令压缩集合:使用
db.runCommand({compact: 'collection_name'})对指定集合进行压缩,重组数据文件并释放未使用的空间。需管理员权限,执行期间可能阻塞写入(建议在低峰期操作)。 - 重建集合替代删除:对于大集合,创建新集合并插入原数据(
db.new_collection.insertMany(db.old_collection.find())),然后删除旧集合并重命名新集合(db.old_collection.drop(); db.new_collection.renameCollection('old_collection', true))。此方法能彻底释放空间,但需预留足够磁盘空间容纳新集合。 - repairDatabase修复:使用
db.runCommand({repairDatabase: 1})修复数据库,回收损坏或未使用的空间。需停机操作,且需磁盘空间大于数据文件总大小(用于临时存储)。
3. 存储引擎优化:提升空间利用率
- 使用WiredTiger引擎(默认):WiredTiger支持数据压缩(Snappy/Zstd),比MMAPv1更节省空间。确认引擎配置:
storage.engine: wiredTiger(默认开启)。 - 调整压缩算法:在
/etc/mongod.conf中设置更高的压缩级别(如Zstd-3),提升压缩率(Zstd比Snappy节省约50%空间):storage.wiredTiger.engineConfig.compressor: "zstd"。修改后需重启MongoDB生效。 - 调整缓存大小:合理设置
storage.wiredTiger.engineConfig.cacheSizeGB(如系统内存的50%),避免缓存过大占用过多磁盘空间(缓存用于存储热数据,减少磁盘IO)。
4. 日志管理:减少日志文件占用
- 配置logrotate轮转:编辑
/etc/logrotate.d/mongodb文件,设置日志轮转规则(如每天轮转、保留7天、压缩旧日志):/var/log/mongodb/mongod.log { daily rotate 7 compress missingok notifempty sharedscripts copytruncate dateext size 200M postrotate /bin/kill -SIGUSR1 $(cat /var/log/mongodb/mongod.lock) endscript }此配置每天轮转日志,保留最近7天的.gz压缩文件,当日志文件超过200M时触发轮转。
- 手动触发日志切割:使用
db.runCommand({logRotate: 1})命令手动切割日志,无需重启服务。 - 调整日志级别:降低日志详细程度(
systemLog.verbosity: 1,默认值为1),减少不必要的日志输出(如调试信息)。
5. 监控与预警:提前预防空间不足
- 定期监控磁盘空间:使用
df -h命令查看磁盘使用率(重点关注/var/lib/mongodb目录,MongoDB默认数据目录),或用du -sh /var/lib/mongodb/*查看MongoDB数据目录大小。 - 设置阈值告警:通过脚本监控磁盘使用率(如当使用率超过80%时发送邮件告警),或使用监控工具(如Prometheus+Grafana)可视化磁盘空间趋势,及时触发扩容或清理操作。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1446793.html