autoCompact
定义
语法
该命令具有以下语法:
db.runCommand( { autoCompact: <boolean>, freeSpaceTargetMB: <int>, // Optional runOnce: <boolean>, // Optional } )
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
注意
MongoDB Atlas集群目前不支持此命令。
命令字段
该命令可以采用以下可选字段:
字段 | 类型 | 说明 |
---|---|---|
| 整型 | 可选。 指定要继续压实操作所必须恢复的最小存储空间量(以兆字节为单位)。 默认值:20 |
| 布尔 | 可选。 如果将 如果将 |
所需权限
对于强制执行身份验证的集群,您必须以对集群具有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
。