mesclarChunks
Definição
mergeChunks
Para uma coleção fragmentada, combina intervalos
mergeChunks
de blocos contíguos em um fragmento em um único bloco. Emita o comandomergeChunks
noadmin
banco de banco de dados a partir de umamongos
instância.
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 instâncias sem servidor. 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
mergeChunks
tem o seguinte formato:
db.adminCommand( { mergeChunks : <namespace> , bounds : [ { <shardKeyField>: <minFieldValue> }, { <shardKeyField>: <maxFieldValue> } ] } )
Para chaves de shard compostas, você deve incluir a chave de shard completa na especificação do bounds
. Por exemplo, se a chave de shard for { x: 1, y:
1 }
, mergeChunks
terá o seguinte formulário:
db.adminCommand( { mergeChunks : <namespace> , bounds : [ { x: <minValue>, y: <minValue> }, { x: <maxValue>, y: <maxValue> } ] } )
Campos de comando
O comando mergeChunks
utiliza os seguintes campos:
Controle de acesso
Em sistemas executados com authorization
, o role integrado clusterManager
fornece os privilégios necessários.
Comportamento
Observação
Use o mergeChunks
somente em circunstâncias especiais. Por exemplo, ao limpar seu cluster fragmentado após remover muitos documentos.
Para mesclar partes com êxito, o seguinte deve ser verdadeiro:
No campo
bounds
,<minkey>
e<maxkey>
devem corresponder aos limites inferior e superior das partes a serem mesclados.As partes devem residir no mesmo fragmento.
As partes devem ser contíguos.
mergeChunks
retorna um erro se estas condições não forem satisfeitas.
Retornar mensagens
Em caso de sucesso, mergeChunks
retorna este documento:
{ "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1510767081, 1), "signature" : { "hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="), "keyId" : NumberLong("6488693018630029321") } }, "operationTime" : Timestamp(1510767081, 1) }
Outra operação em andamento
mergeChunks
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 o processo de balancer, alterar metadados enquanto mergeChunks
estiver em execução, você poderá ver esse erro. Você pode tentar novamente a operação mergeChunks
sem efeitos colaterais.
Parte em fragmentos diferentes
Se os chunks de entrada não estiverem no mesmo shard, mergeChunks
retornará um erro semelhante ao seguinte:
{ "ok" : 0, "errmsg" : "could not merge chunks, collection test.users does not contain a chunk ending at { username: \"user63169\" }", "$clusterTime" : { "clusterTime" : Timestamp(1510767081, 1), "signature" : { "hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="), "keyId" : NumberLong("6488693018630029321") } }, "operationTime" : Timestamp(1510767081, 1) }
Blocos não contíguos
Se os chunks de entrada não forem contíguos, mergeChunks
retornará um erro semelhante ao seguinte:
{ "ok" : 0, "errmsg" : "could not merge chunks, collection test.users has more than 2 chunks between [{ username: \"user29937\" }, { username: \"user49877\" })" "$clusterTime" : { "clusterTime" : Timestamp(1510767081, 1), "signature" : { "hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="), "keyId" : NumberLong("6488693018630029321") } }, "operationTime" : Timestamp(1510767081, 1) }