Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

mesclarChunks

Nesta página

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

Para uma coleção fragmentada, mergeChunks combina intervalos de blocos contíguos em um fragmento em um únicobloco . Emita o comando mergeChunks no banco de banco de dados admin a partir de uma instância mongos .

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

O comando tem a seguinte sintaxe:

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 utiliza 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

array

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

Voltar

moveRange