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

compactar

Nesta página

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

Rewrites and defragments all data and indexes in a collection. On WiredTiger databases, this command will release unneeded disk space to the operating system.

O comando tem a seguinte sintaxe:

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

O comando utiliza os seguintes campos:

Observação

Começando no MongoDB 4.2

O MongoDB remove o mecanismo de armazenamento 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).

Aviso

Tenha sempre uma cópia de segurança atualizada antes de executar a manutenção do servidor como a operação compact .

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.

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 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 a operação com o método db.killOp() ou reiniciar o servidor antes da conclusão da operação compact , esteja ciente do seguinte:

  • Se você tiver o registro no diário ativado, os dados permanecerão válidos e utilizáveis, independentemente do estado da operação compact . Talvez seja necessário reconstruir manualmente os índices.

  • Se você não tiver diário habilitado e o mongod ou compact terminar durante a operação, é impossível garantir que os dados estejam em um estado válido.

  • Em ambos os casos, grande parte do espaço livre existente na collection pode se tornar inutilizável. Nesse cenário, você deve reexecutar a compactação para concluir para restaurar o uso deste espaço livre.

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

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, 5.0.12 e 6.0.2
  • 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.

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 .

← CollMod