整理物理空间碎片以提升磁盘利用率
MongoDB数据库在长期频繁地删除/写入数据或批量删除了大量数据,将产生很多物理空间碎片。这些碎片将占用磁盘空间,降低磁盘利用率。您可以对集合中的所有数据和索引进行重写和碎片整理,释放未使用的空间,提升磁盘利用率和查询性能。
前提条件
实例的存储引擎为WiredTiger。
注意事项
- 执行该操作前,建议对数据库进行备份,详情请参见手动备份MongoDB数据。
- 执行该操作会导致集合所属的数据库被锁定,且该数据库的读写操作将被阻塞,请在业务低峰期操作。
说明 执行物理空间回收命令(compact)所需的时间与集合数据量、系统负载等因素有关。
背景信息
通常情况下,使用db.collection.remove({}, {multi: true})
命令删除文档,文档将从btree中删除,但是文档占用的物理空间不会被回收。如果执行remove命令删除了大量的文档,且后续的数据写入操作很少,这将降低磁盘利用率,此时可执行compact命令回收空闲的物理空间。
说明
- 新写入的数据将会使用未被回收的物理空间,所以在数据持续写入的场景中,不需要频繁执行compact命令整理物理空间碎片。
- 如您使用
db.collection.drop()
命令删除集合,那么集合的物理文件会被删除,且物理空间会被回收。
预估回收的物理空间
整理单节点实例/副本集实例的碎片
整理分片集群实例的碎片
相关问题
解决因磁盘空间耗尽导致的锁定/无法写入问题版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论