【最佳实践】巡检项:云数据库(MongoDB)存储容量

2022-04-13 18:09:50 浏览数 (1)

问题描述

检查腾讯云数据库 MongoDB 实例的磁盘使用情况,如果磁盘使用率过高,则短时间内可能会写满磁盘,导致后续的数据无法写入,影响业务。

解决方案

1、建议对无效数据进行清理,释放空间。

一:使用db.dropDatabase()db.collection.drop()指令删除对应的数据库和集合文件,该类指令执行后会立即释放空间。

二:使用db.collection.remove()命令删除文件。

说明:执行db.collection.remove()命令了删除文件,但是文件的物理空间不会被回收。如果执行remove命令删除了大量的文档,当新写入的数据大小满足碎片空间大小时,该碎片空间就会被重复利用,如果后续写入较小,可执行compact命令回收空闲的物理空间。

可以执行db.stats()命令查看碎片整理前后数据库占用的磁盘空间。

预估campact操作能回收多少空间,可以通过下面命令进行查询:

代码语言:javascript复制
 db.coll.stats().wiredTiger["block-manager"]["file bytes available for reuse"]

执行以下命令,对某个集合进行碎片整理。

代码语言:javascript复制
db.runCommand({compact:"<collection_name>",force:true})

2、如果确认数据都需要保留,可以调整 MongoDB 实例规格,扩容云数据库的存储空间

注意事项

1、在调整配置过程中,如果本地宿主机磁盘空间不足以支持新扩容后的配置,可能会进行数据迁移,期间实例访问不受影响;迁移完成后会进行切换,会有秒级别闪断,请确保业务程序具备重连机制。

2、compact 一个集合,会加集合所在DB的互斥写锁,会导致该DB上所有的读写请求都阻塞;因为 compact 执行的时间可能很长,跟集合的数据量相关,所以强烈建议在业务低峰期执行,避免影响业务。

0 人点赞