Definição
compactRecompõ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.
Compatibilidade
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
Sintaxe
O comando tem a seguinte sintaxe:
{ compact: <collection name> }
Campos de comando
O comando utiliza 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 |
|---|---|---|
| string | O nome da collection. |
| flag | Opcional. A partir da v,4.4 se especificado, força a A partir de v4.4, |
| 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). Novidades na versão 4.4. |
compact Privilégios necessários
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 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" ] } )
Comportamento
Bloqueio
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.
Monitoramento do progresso
Para verificar o progresso da operação compact, monitore o arquivo de registro mongod ou execute db.currentOp() em outra instância do shell.
Encerramento da operação
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.
Espaço em disco
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.
Conjuntos de réplicas
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
compactpara os secundários.Você deve executar
compactem nós secundários sempre que possível. Se você não puder executarcompactnos secundários, consulte a opção force.A partir do MongoDB 5.0.12:
Um nó secundário pode replicar enquanto
compactestiver em execução.Leituras permitidas.
Para executar compact em um cluster
Reatribuir o nó primário.
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.
Considerações Específicas de Versão para Nós Secundários
O comportamento de bloqueio em nós secundários é específico da versão.
Versão | Comportamento de bloqueio |
4.4 |
|
Postar 4.4.17 e 5.0.12 |
|
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.
Clusters fragmentados
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 .
Construção de Índices
mongod reconstrói todos os índices em paralelo após a operação compact .