autoCompact
定义
autoCompact
新版本8.0.
启用或禁用后台压缩。当启用时,
autoCompact
会定期遍历所有可用文件,并在有足够的可用存储空间时持续运行压缩。在启用
autoCompact
之前,运行dbStats
命令以查看是否有足够的可用存储空间进行压缩。如果dbStats
返回的可用空间小于freeSpaceTargetMB
,则后台压缩无效。
语法
命令具有以下语法
db.runCommand( { autoCompact: <boolean>, freeSpaceTargetMB: <int>, // Optional runOnce: <boolean>, // Optional } )
兼容性
此命令可在以下环境中部署
MongoDB企业版:MongoDB的基于订阅的自管理版本
MongoDB社区版:MongoDB的源代码可用的、免费使用且自管理的版本
注意
当前此命令不支持MongoDB Atlas集群。
命令字段
命令可以包含以下可选字段
字段 | 类型 | 描述 |
---|---|---|
freeSpaceTargetMB | 整数 | 可选。指定压缩必须可恢复的最小存储空间量(以兆字节为单位)。 默认值 20 |
runOnce | 布尔型 | 可选。如果将 如果将 |
所需权限
对于强制执行 身份验证 的集群,您必须以具有集群上 compact
权限的用户进行身份验证。hostManager
角色提供了运行 autoCompact
所需的权限。
行为
阻塞
尽管 autoCompact
命令本身不会阻止读写操作,但后台压缩会应用与 compact
命令相同的阻止行为。
此外,如果在后台压缩活动期间调用 autoCompact
,MongoDB 会返回错误。如果您需要重新启动 autoCompact
或以不同选项再次运行它,您必须首先停止当前的后台压缩操作。
db.runCommand( { autoCompact: false } )
一旦当前后台压缩被禁用,您可以使用新配置重新启动 autoCompact
。
排除的集合
如果存在 操作日志,MongoDB 会将其从后台压缩中排除。
性能考虑
我们建议在低流量期间运行 autoCompact
。
压缩会定期将数据库检查点,这可能会导致同步开销。在高流量数据库中,这可能会延迟或阻止操作任务,如备份数据库。为了防止意外中断,在备份数据库之前请禁用压缩。
副本集
您可以对存储在副本集中的集合和索引运行后台压缩。但是请注意以下事项:
主节点不会将
autoCompact
命令复制到从节点。从节点可以在后台压缩运行时复制数据。
后台压缩运行时允许读取和写入。
分片集群
autoCompact
仅适用于 mongod
实例。在分片环境中,请在每个分片上单独运行 autoCompact
。
您不能在 mongos
实例上运行 autoCompact
。