Author:skate
Time:2023/10/22
一、问题描述
产线用户反馈,一个华为云的mongo实例磁盘空间告警,使用率超过90%(使用状况 1630.9/1800GB),让其通过数据库运维平台找到占用大空间的表,然后清理历史数据;用户清理数据后,发现使用的磁盘空间没有减少
二、问题分析
华为云mongo实例信息:
配置:| 2 vCPUs | 4GB
版本:4.0
存储引擎:WiredTiger
磁盘使用率:90.61%(使用状况 1630.9/1800 GB)
查看占用磁盘空间大的表

通过数据库运维平台查看如上三个表占用磁盘空间最大,而且数据逻辑大小远远小于数据占用的存储空间,说明数据清理产生了有大量的碎片;一般来说磁盘碎片会被数据库继续使用,当有新数据插入时,会重复利用这些碎片。
但是我们目前碎片占用空间太大,需要回收下
三、解决方案
可以通过如下命令回收集合的的磁盘碎片
db.runCommand({compact:"<collection_name>",force:true})
因为MongoDB 4.4及之前的版本执行compact命令会导致集合所属的数据库被锁定,且该数据库的读写操作将被阻塞,建议在业务低峰期操作,操作的步骤如下

文章讲述了华为云MongoDB实例中磁盘空间告警的问题,分析了碎片产生的原因,提供了通过compact命令回收碎片以及在阿里云和华为云实例上的操作区别。最终通过实例操作展示了磁盘利用率的显著改善。
1399

被折叠的 条评论
为什么被折叠?



