定义
autoCompact8.0版本新增。
启用或禁用背景压实。 启用后,
autoCompact会定期遍历所有可用文件,并在有足够的可用存储空间时持续运行压实。autoCompact在启用$collStats之前,使用 选项运行storageStats: {}聚合阶段,查看是否有足够的可用存储空间来继续压实。如果freeStorageSize返回的可用空间量小于freeSpaceTargetMB,背景压实不起作用。
语法
该命令具有以下语法:
db.runCommand( { autoCompact: <boolean>, freeSpaceTargetMB: <int>, // Optional runOnce: <boolean>, // Optional } )
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
M0 和 Flex 集群不支持此命令。有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
命令字段
该命令可以采用以下可选字段:
字段 | 类型 | 说明 |
|---|---|---|
| 整型 | 可选。 指定要继续压实操作所必须恢复的最小存储空间量(以兆字节为单位)。 默认值:20 |
| 布尔 | 可选。 如果将 如果将 |
所需权限
MongoDB Atlas:用户必须具有
autoCompact内置角色。自管理部署:用户必须对集群具有
compact动作权限。hostManager角色提供运行autoCompact所需的特权。
行为
阻塞
尽管autoCompact命令本身不会区块读取和写入,但背景压实会应用与compact命令相同的阻止行为。
此外,如果您在背景压实处于活动状态时调用autoCompact , MongoDB会返回错误。 如果需要重新启动autoCompact或使用不同选项再次运行,则必须首先停止当前的背景压实操作:
db.runCommand( { autoCompact: false } )
禁用当前背景压实后,您可以使用新配置重新启动autoCompact 。
已排除的集合
如果oplog存在, MongoDB会将其排除在背景压实。
性能考虑因素
我们建议在流量较低时运行autoCompact 。
压实会定期对数据库设置检查点,这可能会导致同步开销。在高流量数据库上,这可能会产生延迟或阻止备份等操作任务。为避免意外中断,请在进行备份之前禁用压实。
副本集
您可以对存储在副本集的集合和索引运行背景压实。 但请注意以下事项:
主节点 (primary node in the replica set)节点不会将
autoCompact命令复制到从节点(secondary node from replica set)节点。节点从节点(secondary node from replica set)在背景压实运行时复制数据。
背景压实运行时允许读取和写入。
分片集群
autoCompact 仅适用于mongod实例。 在分分片的环境中,对每个分分片分别运行autoCompact 。
您无法针对mongos实例运行autoCompact 。