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
  • Saiba mais
compact

Tenta liberar 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: <string>,
dryRun: <boolean>,
force: <boolean>, // Optional
freeSpaceTargetMB: <int>, // Optional
comment: <any>, // Optional
}
)

O comando utiliza os seguintes campos:

Campo
Tipo
Descrição
compact
string
O nome da collection.
dryRun
booleano

Novidades na versão 8.0.

Se ativado, o comando compact retorna uma estimativa de quanto espaço, em bytes, a compactação pode recuperar da collection direcionada. Se você executar compact com dryRun definido como true, o MongoDB retornará apenas o valor estimado e não executará nenhum tipo de compactação.

Padrão: falso

force
booleano

Alterado na versão 4.4.

Opcional. Se ativado, 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.

freeSpaceTargetMB
Inteiro

Opcional. Especifica a quantidade mínima de espaço de armazenamento, em megabytes, que deve ser recuperável para que a compactação continue.

Padrão: 20

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 coleção de destino. As funções dbAdmin e hostManager fornecem os privilégios necessários para executar compact em coleções 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 dbAdmin, hostManager ou a função personalizada a um usuário existente, use db.grantRolesToUser() ou db.updateUser(). A seguinte operação concede a função personalizada compact 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.

A compactação verifica regularmente o banco de dados, o que pode levar à sobrecarga de sincronização. Em bancos de dados de alto tráfego, isso pode atrasar ou impedir tarefas operacionais, como fazer backups. Para evitar interrupções inesperadas, desative a compactação antes de fazer um backup.

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.

Se você tentar executar vários comandos compact simultâneos na mesma coleção, o MongoDB retornará um erro.

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

db.runCommand( { compact: "movies" } )
{ bytesFreed: 27859, ok: 1 }

A operação a seguir executa uma simulação do comando compact na coleção movies :

db.runCommand( {
compact: "movies",
dryRun: true
} )
{ estimatedBytesFreed: 27859, ok: 1 }

Voltar

CollMod