Docs Menu
Docs Home
/ /
Administración

Claro jumbo Flag

Si MongoDB no puede dividir un fragmento que excede el tamaño de rango especificado, MongoDB etiqueta el fragmento como jumbo.

Los siguientes procedimientos describen los pasos para borrar manualmente el indicador jumbo.

La forma manual preferida de borrar el indicador jumbo de un fragmento es intentar dividirlo. Si el fragmento es divisible, MongoDB elimina el indicador al dividirlo correctamente.

1

Conecte mongosh a mongos un.

2

Ejecute para encontrar el sh.status(true) fragmento jumbo etiquetado.

sh.status(true)

Por ejemplo, la siguiente salida de sh.status(true) muestra que el fragmento con rango de clave de fragmento { "x" : 2 } -->> { "x" : 4 } es jumbo.

--- Sharding Status ---
sharding version: {
...
}
shards:
...
databases:
...
test.foo
shard key: { "x" : 1 }
chunks:
shard-b 2
shard-a 2
{ "x" : { "$minKey" : 1 } } -->> { "x" : 1 } on : shard-b Timestamp(2, 0)
{ "x" : 1 } -->> { "x" : 2 } on : shard-a Timestamp(3, 1)
{ "x" : 2 } -->> { "x" : 4 } on : shard-a Timestamp(2, 2) jumbo
{ "x" : 4 } -->> { "x" : { "$maxKey" : 1 } } on : shard-b Timestamp(3, 0)
3

Utilice sh.splitAt() o para dividir sh.splitFind() el jumbo fragmento.

sh.splitAt( "test.foo", { x: 3 })

MongoDB remueve la marca jumbo tras la división exitosa del fragmento.

En algunos casos, MongoDB no puede dividir el fragmento que ya no es jumbo, como un fragmento con un rango de valores de clave de fragmento único. Por lo tanto, no se puede dividir el fragmento para borrar la marca.

En tales casos, puede cambiar la clave del fragmento para que éste pueda volverse divisible o borrar la bandera manualmente.

MongoDB proporciona el comando.refineCollectionShardKey refineCollectionShardKey Con el comando, puede refinar la clave de fragmento de una colección añadiendo uno o más campos de sufijo a la clave existente. Al añadir nuevos campos a la clave de fragmento, los fragmentos jumbo indivisibles pueden volverse divisibles.

1

Conecte mongosh a mongos un.

2

Ejecute para encontrar el sh.status(true) fragmento jumbo etiquetado.

sh.status(true)

Por ejemplo, la siguiente salida de muestra que para la sh.status(true) colección test.orders fragmentada, tanto el fragmento con rango de clave de { "status" : "A" } -->> { "status" : "D" } fragmento como el fragmento con rango { "status" : "D" } -->> { "status" : "P" } jumboson.

--- Sharding Status ---
sharding version: {
...
}
shards:
...
databases:
...
test.orders
shard key: { "status" : 1 }
unique: false
balancing: true
chunks:
shardA 2
shardB 2
{ "status" : { "$minKey" : 1 } } -->> { "status" : "A" } on : shardB Timestamp(3, 0)
{ "status" : "A" } -->> { "status" : "D" } on : shardA Timestamp(5, 1) jumbo
{ "status" : "D" } -->> { "status" : "P" } on : shardA Timestamp(4, 2) jumbo
{ "status" : "P" } -->> { "status" : { "$maxKey" : 1 } } on : shardB Timestamp(5, 0)
3

Para solucionar la baja cardinalidad de la clave status, refine la clave para la colección test.orders. Por ejemplo, añada los campos order_id y customer_id como sufijo a la clave de fragmento actual; es decir, la clave de fragmento será { status: 1, order_id: 1, customer_id: 1 } después del refinamiento.

  1. Primero, para admitir la clave decreate the index fragmento { status: 1, order_id: 1, customer_id: 1 } si el índice aún no existe.

    db.orders.createIndex( { status: 1, order_id: 1, customer_id: 1 } )

    Para obtener consideraciones de índice adicionales para refinar la clave de fragmento, consulte Consideraciones de índice.

  2. En la admin base de datos, ejecute el comando para agregar refineCollectionShardKey los order_id customer_id campos y como sufijo a la clave existente:

    db.adminCommand( {
    refineCollectionShardKey: "test.orders",
    key: { status: 1, order_id: 1, customer_id: 1 }
    } )

El comando refineCollectionShardKey actualiza los rangos de fragmentos y zonas para incorporar los nuevos campos sin modificar los valores de rango de los campos de clave existentes. Es decir, el refinamiento de la clave de fragmento no afecta inmediatamente la distribución de fragmentos entre fragmentos o zonas. Cualquier división o migración de fragmentos futura se realiza como parte de las operaciones rutinarias de fragmentación.

Tip

Después de refinar la clave de fragmento, es posible que no todos los documentos de la colección tengan los campos de sufijo. Para completar los campos de clave de fragmento que faltan, consulte Campos de clave de fragmento que faltan.

Antes de refinar la clave de fragmento, asegúrese de que todos o la mayoría de los documentos de la colección tengan los campos de sufijo, si es posible, para evitar tener que completar el campo posteriormente.

Para borrar manualmente la bandera jumbo, puedes usar el comando clearJumboFlag. Si borras la bandera jumbo de un fragmento que aún excede el tamaño de fragmento, MongoDB volverá a etiquetar el fragmento como jumbo cuando intente moverlo.

Importante

Utilice este método sólo si el método preferido no es aplicable.

Para borrar manualmente la marca, use los siguientes pasos:

1

Conecte mongosh a mongos un.

2

Ejecute para encontrar el sh.status(true) fragmento jumbo etiquetado.

sh.status(true)

Por ejemplo, la siguiente salida de sh.status(true) muestra que el fragmento con rango de clave de fragmento { "x" : 2 } -->> { "x" : 3 } es jumbo.

--- Sharding Status ---
sharding version: {
...
}
shards:
...
databases:
...
test.foo
shard key: { "x" : 1 }
chunks:
shard-b 2
shard-a 2
{ "x" : { "$minKey" : 1 } } -->> { "x" : 1 } on : shard-b Timestamp(2, 0)
{ "x" : 1 } -->> { "x" : 2 } on : shard-a Timestamp(3, 1)
{ "x" : 2 } -->> { "x" : 3 } on : shard-a Timestamp(2, 2) jumbo
{ "x" : 3 } -->> { "x" : { "$maxKey" : 1 } } on : shard-b Timestamp(3, 0)
3

Desde la admin base de clearJumboFlag datos, ejecute, pasando el espacio de nombres de la colección fragmentada y:

  • los límites del jumbo fragmento:

    db.adminCommand( {
    clearJumboFlag: "test.foo",
    bounds: [{ "x" : 2 }, { "x" : 3 }]
    })
  • El documento encontrado con una clave de jumbo fragmento y un valor contenido en el fragmento:

    db.adminCommand( {
    clearJumboFlag: "test.foo",
    find: { "x" : 2 }
    })

    Nota

    Si la colección usa una clave de fragmento con hash, no use el find campo con. Para claves de fragmento con hash, use clearJumboFlag el bounds campo.

Volver

Eliminar fragmentos

En esta página