Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

compactar (comando de banco de dados)

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

Esse comando não é suportado em clusters M0 e Flex. 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

Opcional. Se ativado, força compact a ser executado no primário em um conjunto de réplicas.

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

Observação

O comando compact não bloqueia operações CRUD do MongoDB no banco de dados que está compactando.

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 o compact com o método db.killOp() ou reiniciar o servidor antes que a operação termine, o compact será encerrado. A operação pode não liberar espaço em disco de volta para o sistema operacional.

O comando compact reduz o espaço em disco para dados e índices em uma coleção, liberando blocos obsoletos para o sistema operacional. A eficácia depende de quantos blocos estão disponíveis para liberação e sua localização no arquivo de dados.

Para ver como o espaço de armazenamento muda na collection, execute o collStats comando antes e depois da compactação. Você pode usar a métrica collStats.freeStorageSize de saída para visualizar a quantidade de armazenamento disponível para reutilização.

A operação é iterativa, trabalhando em segmentos do arquivo de dados em cada passagem. Para estimar quanto espaço compact libera, use o sinalizador dryRun. Chamar compact em uma coleção compacta a coleção e seus índices associados.

compact podem exigir espaço em disco adicional para serem executados.

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.

Observação

Se a sua implementação utiliza leituras secundárias e transações multi-shard, considere executar uma sincronização inicial em vez de compact.

Quando compact é executado, o WiredTiger ajusta temporariamente a estratégia do gerenciador de blocos para acomodar a carga de trabalho compacta. Esse ajuste pode deixar as operações de checkpoint mais lentas e aumentar o tempo que um nó leva para confirmar uma transação. As confirmações atrasadas de transações podem causar latência de leitura significativa, atraso de replicação e filas operacionais.

Você pode usar compact em coleções e índices em um conjunto de réplicas. Considere o seguinte:

  • O nó primário não replica o comando compact para os secundários.

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

  • Começando no MongoDB 6.1.0 (e 6.0.2):

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

Cada nó aplica gravações em seus índices de forma independente. O tamanho do armazenamento do índice pode diferir entre os membros de um conjunto de réplicas, mesmo quando os membros contêm dados idênticos. Um nó primary aplica gravações diretamente de operações do cliente . Um nó secundário aplica as mesmas gravações do oplog, geralmente em lotes e ordem diferentes. Essas diferenças no padrão de gravação alteram a forma como o mecanismo de armazenamento empacota e comprime páginas de índice. Como resultado, um índice em um membro pode ficar maior no disco do que o mesmo índice em outro membro.

Para alinhar um índice afetado de volta com o mesmo índice em outros membros, use uma das seguintes opções de correção:

Ao planejar a capacidade de armazenamento para um conjunto de réplicas, considere essa variação no tamanho do índice entre os membros.

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.

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

Observação

Os exemplos a seguir incluem force: true, que é necessário ao executar compact em um primário de conjunto de réplicas ativo. Para executar compact sem force: true, diminua o primário primeiro. Para obter mais informações, consulte Conjunto de réplicas.

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

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

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

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