“文档” 菜单
文档首页
/
MongoDB Manual
/ / /

compact

在此页面上

  • 定义
  • 语法
  • 命令字段
  • compact 所需权限
  • 行为
compact

对集合中的所有数据和索引进行重写和碎片整理。在 WiredTiger数据库上,此命令将释放不需要的磁盘空间给操作系统。

该命令具有以下语法:

db.runCommand(
{
compact: <collection name>
}
)

该命令接受以下字段:

注意

从 MongoDB 4.2 开始

MongoDB 删除了 MMAPv 1存储引擎以及 compact 的 MMAPv 1特定选项paddingFactorpaddingBytespreservePadding

字段
类型
说明
compact
字符串
集合的名称。
force
标志

可选。从 v4 4开始。 (如果已指定)将强制 在compact 副本集中 节点上运行。在 之前。 ,如果值为4 4,此布尔字段将启用compact 副本集中 true的 主 节点上运行;如果值为false ,则在 主 节点上运行时返回错误,因为该命令阻止了所有其他操作。

从 v 4开始。 4 、 compact不会阻止正在压缩的数据库上的MongoDB CRUD 操作

comment
任何

可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:

注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。

警告

在执行服务器维护(例如compact操作)之前,始终要有最新的备份。

对于强制执行身份验证的集群,您必须以对目标集合具有compact操作权限的用户身份进行身份验证。 dbAdmin角色提供对非系统集合运行compact所需的特权。

有关配置 resource 文档的更多信息,请参阅资源文档

要将 dbAdmin 或自定义角色添加到现有用户,请使用 db.grantRolesToUser()db.updateUser()。以下操作在 admin 数据库上将自定义 compact 角色授予 myCompactUser

use admin
db.grantRolesToUser("myCompactUser", [ "dbAdmin" | "myCustomCompactRole" ] )

要向新用户添加 dbAdmin 或自定义角色,请在创建用户时对 db.createUser() 方法的 roles 数组指定该角色。

use admin
db.createUser(
{
user: "myCompactUser",
pwd: "myCompactUserPassword",
roles: [
{ role: "dbAdmin", db: "<database>" } | "myCustomCompactRole"
]
}
)

要在副本集内运行 compact,请参阅副本集,以了解其他注意事项。

要检查 compact 操作的进度,请监控 mongod 日志文件或从另一个 shell 实例运行 db.currentOp()

如果使用db.killOp()方法终止操作或在compact操作完成之前重新启动服务器,请注意以下事项:

  • 如果启用了日志功能,则无论compact操作的状态如何,数据都将保持有效且可用。您可能必须手动重建索引。

  • 如果未启用日志功能,并且mongodcompact在操作期间终止,则无法保证数据处于有效状态。

  • 无论哪种情况,集合中的大部分现有可用空间都可能变得不可重用。在这种情况下,应重新运行压缩操作直至完成,以恢复此可用空间的使用。

要查看集合的存储空间如何变化,请在压实之前和之后分别运行 collStats 命令。

WiredTiger 上compact尝试减少集合中数据和索引所需的存储空间,从而向操作系统释放不需要的磁盘空间。 此操作的有效性取决于工作负载,并且无法恢复任何磁盘空间。 如果您已从集合中删除大量数据且不打算替换,则此命令非常有用。

compact 可能需要额外的磁盘空间才能在 WiredTiger 数据库上运行。

您可以在存储在副本集中的集合和索引上使用 compact,但有一些重要的注意事项:

  • 主节点不会将 compact 命令复制到从节点。

  • 尽可能在从节点上运行 compact。如果无法在从节点上运行 compact,请参阅 force 选项。

  • 从 MongoDB 6开始。 0 。 2 (以及5 . 0 . 12 ):

    • 从节点可以在 compact 运行时进行复制。

    • 允许读取。

在集群上运行 compact

1

在其中一个从节点上运行 compact。当 compact 完成后,依次对剩余的每个从节点重复该操作。

2

要降级当前主节点并触发选举,请使用 rs.stepDown() 方法。要指定特定的从节点,请调整节点优先级

3

降级后,旧的主节点将成为从节点。在旧的主节点上运行 compact

从节点上的阻塞行为与版本有关。

版本
阻止行为
4.4
  • 无法进行复制。

  • 不允许读取。

版本 4.4.17、 5.0.12 和 6.0.2
  • 从节点可以在 compact 运行时进行复制。

  • 允许读取。

运行 compact 命令时,副本集将保持 SECONDARY 状态。

有关副本集成员状态的更多信息,请参阅副本集成员状态

有关副本集维护和可用性,请参阅在副本集成员上执行维护。

compact仅适用于mongod实例。 在分片环境中,在每个分片上分别运行compact作为维护操作。

您无法针对 实例发出compact mongos

mongodcompact操作之后并行重建所有索引。

← collMod