在本页面
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
命令将尝试压缩集合。