Definição
moveChunkComando administrativo interno. Move chunks entre shards. Emita o comando
moveChunkpor meio de uma instância domongosao usar o banco de banco de dados admin. Use os seguintes formulários:Dica
Em
mongosh, esse comando também pode ser executado por meio do método auxiliarsh.moveChunk().Os métodos auxiliares são práticos para os usuários
mongosh, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.db.adminCommand( { moveChunk : <namespace> , find : <query> , to : <ID of the recipient shard>, forceJumbo: <boolean>, _secondaryThrottle : <boolean>, writeConcern: <document>, _waitForDelete : <boolean> } ) Outra opção é:
db.adminCommand( { moveChunk : <namespace> , bounds : <array> , to : <ID of the recipient shard>, forceJumbo: <boolean>, _secondaryThrottle : <boolean>, writeConcern: <document>, _waitForDelete : <boolean> } ) Observação
Use o comando
listShardspara recuperar o ID do shard do destinatário.O comando
moveChunktem os seguintes campos:CampoTipoDescriçãomoveChunkstring
O namespace da collection onde a parte existe. Especifique o namespace completo da collection, incluindo o nome do reconhecimento de data center.
finddocumento
Uma correspondência de igualdade na chave de fragmento que especifica o valor da chave de fragmento da parte a ser movida. Especifique o campo
boundsou o campofind, mas não ambos. Não use o campofindpara selecionar parte em collection que usam uma chave de fragmento com hash.boundsarray
Os limites de uma parte específica a ser movida. A array deve consistir em dois documento que especificam os valores da chave de parte inferior e superior de uma parte a ser movido. Especifique o campo
boundsou o campofind, mas não ambos. Useboundspara selecionar parte em collection que usam uma chave de fragmento com hash.tostring
A ID do shard do destinatário para o chunk.
booleano
Opcional. Um sinalizador que determina se o comando pode mover uma parte grande demais para ser migrado. A parte pode ou não ser rotulada como jumbo.
Se
true, o comando pode mover a parte.Se
false, o comando não pode mover a parte.
O padrão é
false.AVISO:
O comando
moveChunkcomforceJumbo=trueblocos escreve operações na collection.Essa opção faz com que o shard migre chunks mesmo quando eles são maiores do que o tamanho configurado do chunk. A collection permanece indisponível para gravações durante a migração.
Para migrar esses grandes blocos sem esse longo período de bloqueio, consulte Intervalos de equilíbrio que excedem o limite de tamanho .
_secondaryThrottlebooleano
Opcional. Para WiredTiger, o padrão é
false.Se
true, por padrão, cada movimentação de documento durante a migração de bloco se propaga para pelo menos um secundário antes que o balanceador prossiga com o próximo documento. Isso é equivalente a uma referência de escrita de{ w: 2 }.Use a opção
writeConcernpara especificar uma referência de escrita diferente.Se
false, o balanceador não aguarda a replicação em um secundário e, em vez disso, continua com o próximo documento.
Para obter mais informações, consulte Acelerador secundário.
writeConcerndocumento
Opcional. Um documento que expressa a referência de escrita que o
_secondaryThrottleusará para aguardar secundários durante a migração de partes.writeConcernrequer_secondaryThrottle: true._waitForDeletebooleano
Opcional. Se configurado para
true, a fase de exclusão de uma operaçãomoveChunkestá bloqueando._waitForDeleteé padronizado comofalse.Quando o campo
_waitForDeleteé configurado, o MongoDB não espera pelo atrasoorphanCleanupDelaySecsantes de realizar a exclusão da faixa. Se você utilizar o parâmetro_waitForDeletee houver operações de leitura ocorrendo em réplicas secundárias, a leitura poderá não encontrar documentos devido à fase de exclusão da migração.O valor de
boundsassume o formato:[ { hashedField : <minValue> } , { hashedField : <maxValue> } ] A seção de migração de parte descreve como as partes se movem entre shards no MongoDB.
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
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
Considerações
Use o moveChunk somente em circunstâncias especiais, como preparar seu cluster fragmentado para uma ingestão inicial de dados ou uma grande operação de importação em massa. Na maioria dos casos, permite ao balancer criar e equilibrar chunks em clusters fragmentados. Consulte Criar intervalos em um cluster fragmentado para obter mais informações.
Comportamento
Indexes
moveChunk exige que todos os índices existam no destino (ou seja, to ) antes da migração e retorna um erro se um índice necessário não existir.
Erro de metadados
moveChunk retorna a seguinte mensagem de erro se outra operação de metadados estiver em andamento na coleção chunks :
errmsg: "The collection's metadata lock is already taken."
Se outro processo, como um processo de balancer, alterar os metadados enquanto moveChunk estiver em execução, você poderá ver esse erro. Você pode tentar novamente a operação moveChunk sem efeitos colaterais.
maxCatchUpPercentageBeforeBlockingWrites Server Parameter
A partir de MongoDB 5.0, você pode configurar o maxCatchUpPercentageBeforeBlockingWrites para especificar a porcentagem máxima permitida de dados ainda não migrados durante uma operação do moveChunk quando comparado ao tamanho total (em MBs) do bloco que está sendo transferido.