Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

mesclarChunks

Nesta página

  • Definição
  • Sintaxe
  • Controle de acesso
  • Comportamento
  • Retornar mensagens
mergeChunks

Para uma collection fragmentada, mergeChunks combina faixas de chunks contíguas em um shard em um único chunk . Emita o comando mergeChunks no banco de dados admin a partir de uma instância mongos .

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> } ] } )

O comando mergeChunks usa os seguintes campos:

Campo
Tipo
Descrição
mergeChunks
namespace
O namespace totalmente qualificado da coleção onde existem ambos os blocos . Os namespaces assumem a forma de <database>.<collection>.
bounds
variedade
Uma array que contém os valores de chave mínimos e máximos do novo chunk.

Em sistemas executados com authorization, o role integrado clusterManager fornece os privilégios necessários.

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.

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

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.

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

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)
}
← movePrimary