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

compactar

Nesta página

  • Definição
  • compact Privilégios necessários
  • Comportamento
compact

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

compact tem o seguinte formato:

{ compact: <collection name> }

compact usa os seguintes campos:

Observação

Começando no MongoDB 4.2

O MongoDB remove o mecanismo storage engine MMAPv1 e as opções específicas de MMAPv1 paddingFactor, paddingBytes, preservePadding para compact.

Campo
Tipo
Descrição
compact
string
O nome da collection.
force
bandeira

Opcional. Começando em v4.4, se especificado, força compact a ser executado no primário em um conjunto de réplicas. Antes de v4.4, este campo booleano habilitou compact para executar no primário em um conjunto de réplicas se o valor for true e retornou um erro ao executar em um primary se o valor for false, porque o comando bloqueou todos os outros operações.

Começando em v4.4, compact não bloqueia operações CRUD do MongoDB no banco de dados que está compactando.

comment
qualquer

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).

Novidades na versão 4.4.

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 obter mais informações sobre como configurar o documento resource , consulte Documento de recurso sobre sistemas autogerenciados.

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"
]
}
)

O comportamento de bloqueio é específico da versão.

Versão
Comportamento de bloqueio
4.4
Postar 4.4.17 e 5.0.12

Para executar compact em um conjunto de réplicas, consulte Conjuntos de réplicas para obter considerações adicionais.

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 da conclusão 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, compact tenta reduzir o espaço de armazenamento necessário 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 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.

O comportamento de bloqueio em nós secundários é específico da versão.

Versão
Comportamento de bloqueio
4.4
  • Nenhuma replicação é possível.

  • Leituras não são permitidas.

Postar 4.4.17 e 5.0.12
  • 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 obter informações sobre manutenção e disponibilidade do conjunto de réplicas, consulte Executar manutenção em membros do conjunto de réplicas autogerenciados.

compact só se aplica a instâncias mongod . Em um ambiente fragmentado, execute 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 .

Voltar

CollMod

Próximo

convertToCapped