Docs Menu
Docs Home
/ /

mergeChunks (comando de base de datos)

mergeChunks

Para una colección fragmentada, mergeChunks combina contiguos Los rangos de fragmentos de un fragmento se convierten en un solo fragmento. Ejecute el mergeChunks comando en la admin base de datos desde una mongos instancia.

Este comando está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

El comando tiene la siguiente sintaxis:

db.adminCommand(
{
mergeChunks: <namespace>,
bounds : [
{ <shardKeyField>: <minFieldValue> },
{ <shardKeyField>: <maxFieldValue> }
]
}
)

Para las claves de fragmento compuestas, debe incluir la clave de fragmento completa en la bounds especificación. Por ejemplo, si la clave de fragmento { x: 1, y: 1 } es, tiene el siguientemergeChunks formato:

db.adminCommand(
{
mergeChunks: <namespace>,
bounds: [
{ x: <minValue>, y: <minValue> },
{ x: <maxValue>, y: <maxValue> }
]
}
)

El comando toma los siguientes campos:

Campo
Tipo
Descripción

mergeChunks

namespace

El espacio de nombres completo de la colección donde se encuentran ambos fragmentos. Los espacios de nombres tienen la <database>.<collection> forma.

bounds

arreglo

Una matriz que contiene los valores de clave mínimos y máximos del nuevo fragmento.

En las implementaciones que se ejecutan con,authorization clusterManager el rol integrado proporciona los privilegios necesarios.

Nota

Use solo en circunstancias especiales.mergeChunks Por ejemplo, al limpiar su clúster fragmentado después de eliminar muchos documentos.

Para fusionar fragmentos con éxito, se debe cumplir lo siguiente:

  • En el bounds campo, <minkey> y <maxkey> deben corresponder a los límites inferior y superior de los fragmentos que se fusionarán.

  • Los fragmentos deben residir en el mismo fragmento.

  • Los trozos deben ser contiguos.

mergeChunks devuelve un error si no se cumplen estas condiciones.

En caso de éxito, devuelve estemergeChunks documento:

{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1510767081, 1),
"signature" : {
"hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="),
"keyId" : Long("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}

mergeChunks devuelve el siguiente mensaje de error si hay otra operación de metadatos en curso en la chunks colección:

errmsg: "The collection's metadata lock is already taken."

Si otro proceso, como el balanceador, cambia los metadatos mientras se está ejecutando, podría mergeChunks mergeChunks aparecer este error. Puede reintentar la operación sin consecuencias.

Si los fragmentos de entrada no están en la misma partición, mergeChunks devuelve un error similar al siguiente:

{
"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" : Long("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}

Si los fragmentos de entrada no son contiguos, mergeChunks devuelve un error similar a lo siguiente:

{
"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" : Long("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}

Volver

rango de movimiento

En esta página