Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

compactar

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Campos de comando
  • compact Privilégios necessários
  • Comportamento
  • Exemplo
compact

Recompõe e desfragmenta todos os dados e índices em uma coleção. Em bancos de dados WiredTiger, este comando libera espaço em disco desnecessário para o sistema operacional.

Esse comando está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

Importante

Este comando não é suportado em clusters M0, M2 e M5 . Para obter mais informações, consulte Comandos não suportados.

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

O comando tem a seguinte sintaxe:

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

O comando utiliza os seguintes campos:

Campo
Tipo
Descrição

compact

string

O nome da collection.

force

flag

Opcional. Se especificado, força compact a ser executado no primário em um conjunto de réplicas. compact não bloqueia operações CRUD do MongoDB no banco de dados que está compactando.

comment

any

Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:

Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc).

Para clusters que impõem autenticação, você deve se autenticar como usuário com a ação de privilégio compact na collection de destino. A função dbAdmin fornece os privilégios necessários para executar compact em collection que não são do sistema.

Para collections do sistema, você deve:

  1. Crie uma custom role que concede a ação compact na collection do sistema.

  2. Conceda essa função a um usuário novo ou existente.

  3. Autentique como este usuário para executar o comando compact.

Por exemplo, as operações a seguir criam uma função personalizada que concede a ação compact em relação ao banco de dados e à collection especificados:

use admin
db.createRole(
{
role: "myCustomCompactRole",
privileges: [
{
resource: { "db" : "<database>" , "collection" : "<collection>" },
actions: [ "compact" ]
}
],
roles: []
}
)

Para obter mais informações sobre como configurar o documento resource , consulte Documento de recursos sobre implantações autogerenciadas.

Para adicionar o dbAdmin ou o custom role para um usuário existente, utilize db.grantRolesToUser() ou db.updateUser(). A seguinte operação concede o custom compact role para o myCompactUser no banco de dados do admin:

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

Para adicionar o dbAdmin ou o papel personalizado para um novo usuário, especifique o papel para a array roles do método db.createUser() ao criar o usuário.

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

Para verificar o progresso da operação compact, monitore o arquivo de registro mongod ou execute db.currentOp() em outra instância do shell.

Se você encerrar compact com o método db.killOp() ou reiniciar o servidor antes do término da operação, compact será encerrado e poderá falhar na tentativa de liberar espaço em disco de volta para o sistema operacional.

Para ver como o espaço de armazenamento muda na collection, execute o comando collStats antes e depois da compactação.

No WiredTiger, o compact tenta reduzir o espaço de armazenamento exigido para dados e índices em uma collection, liberando espaço em disco desnecessário para o sistema operacional. A eficácia desta operação depende da carga de trabalho e nenhum espaço em disco pode ser recuperado. Esse comando é útil se você tiver removido uma grande quantidade de dados da collection e não planeja substituí-los.

compact pode exigir espaço em disco adicional para ser executado em bancos de dados WiredTiger.

Você pode usar compact em collections e índices armazenados em um replica set, mas há algumas considerações importantes:

  • O nó primário não replica o comando compact para os secundários.

  • Você deve executar compact em nós secundários sempre que possível. Se você não puder executar compact nos secundários, consulte a opção force.

  • A partir do MongoDB 6.1.0, (e 6.0.2 e 5.0.12):

    • Um nó secundário pode replicar enquanto compact estiver em execução.

    • Leituras permitidas.

Para executar compact em um cluster

1

Execute compact em um dos nós secundários. Quando compact terminar, repita a operação em cada um dos secundários restantes.

2

Para descer o primário atual e acionar uma eleição, utilize o método rs.stepDown(). Para indicar um nó secundário específico, ajuste a prioridade do membro.

3

Após descer, o antigo nó primário se torna um nó secundário. Execute compact no nó primário antigo.

  • Um nó secundário pode replicar enquanto compact estiver em execução.

  • Leituras permitidas.

Enquanto o comando compact estiver em execução, o conjunto de réplicas permanecerá em um status SECONDARY.

Para obter mais informações sobre os estados membros do conjunto de réplicas, consulte Estados membros do conjunto de réplicas.

Para manutenção e disponibilidade do conjunto de réplicas, consulte Executar manutenção em membros do conjunto de réplicas autogerenciadas.

compact aplica-se apenas a mongod instâncias. Em um ambiente fragmentado, execute o compact em cada shard separadamente como uma operação de manutenção.

Você não pode emitir compact em relação a uma instância mongos.

mongod reconstrói todos os índices em paralelo após a operação compact.

A seguinte operação executa o comando compact na collection movies:

db.runCommand( { compact: "movies" } )

A execução de compact retorna uma saída semelhante a esta:

{ bytesFreed: 27859, ok: 1 }

Voltar

CollMod