在本页面
compact¶重写集合中的所有数据和索引并对其进行碎片整理。在 WiredTiger数据库上,此命令将释放不需要的磁盘空间到操作系统。
compact 具有以下形式:
compact 包含以下字段:
从MongoDB 4.2开始
MongoDB中删除MMAPv1存储引擎和MMAPv1特定选项paddingFactor,paddingBytes,preservePadding
的compact。
| 领域 | 类型 | 描述 |
|---|---|---|
compact |
串 | 集合的名称。 |
force |
布尔值 | 可选的。如果为
|
警告
在执行服务器维护(如compact操作)之前,请始终进行最新备份。
compact所需特权¶对于执行身份验证的集群,您必须使用compact对目标集合进行特权操作的用户身份进行身份验证。该dbAdmin角色提供了compact针对非系统集合运行所需的特权。
对于系统集合,请创建一个自定义角色,以授予compact对该系统集合执行的操作。然后,您可以将该角色授予新用户或现有用户,并以该用户身份进行身份验证以执行compact命令。例如,以下操作创建一个自定义角色,该角色将compact针对指定的数据库和集合授予操作:
有关配置resource文档的更多信息,请参见
资源文档。
要将dbAdmin或自定义角色添加到现有用户,请使用db.grantRolesToUser或db.updateUser()。以下操作将自定义compact角色
授予数据库myCompactUser上的admin:
要将dbAdmin或自定义角色添加到新用户,请在创建用户时roles在db.createUser()方法数组中
指定角色。
compact仅阻止当前正在运行的数据库的操作。仅compact在计划的维护期内使用。
您可以通过查看mongod日志文件或db.currentOp()
在另一个Shell实例中运行来查看中间进度
。
如果使用该db.killOp()方法终止操作或在compact操作完成之前重新启动服务器
,请注意以下几点:
要查看集合的存储空间如何变化collStats,请在压缩之前和之后运行
命令。
在WiredTiger上,compact尝试减少集合中数据和索引所需的存储空间,从而将不必要的磁盘空间释放给操作系统。此操作的有效性取决于工作负载,并且无法恢复任何磁盘空间。如果您已从集合中删除了大量数据并且不打算替换它,则此命令很有用。
compact 可能需要更多磁盘空间才能在WiredTiger数据库上运行。
compact在辅助服务器上运行。force:true有关压缩主数据库的信息,请参见上面的选项
。compact命令会强制辅助服务器进入RECOVERING状态。向处于该RECOVERING状态的实例发出的读取操作将失败。这样可以防止客户端在操作过程中阅读。操作完成后,辅助服务器返回SECONDARY状态。请参阅对副本集成员执行维护以获取示例副本集维护过程,以在维护操作期间最大程度地提高可用性。
在WiredTiger上,该compact
命令将尝试压缩集合。