compactar
Definição
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
paracompact
.CampoTipoDescriçãocompact
stringO nome da collection.force
bandeiraOpcional. 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 habilitoucompact
para executar no primário em um conjunto de réplicas se o valor fortrue
e retornou um erro ao executar em um primary se o valor forfalse
, 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
qualquerOpcional. 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:
mensagens de log do mongod, no campo
attr.command.cursor.comment
.Saída do perfil do banco de dados, no campo
command.comment
.Saída de
currentOp
, no campocommand.comment
.
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 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" ] } )
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 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.
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
compact
para os secundários.Você deve executar
compact
em nós secundários sempre que possível. Se você não puder executarcompact
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
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 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.
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
.