Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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 la bandera jumbo.

La forma manual preferida de borrar la bandera jumbo de un fragmento es intentar dividir el fragmento. Si el fragmento es divisible, MongoDB remueve la bandera al hacer la división exitosa del fragmento.

1

Conecta mongosh a un mongos.

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 el rango de la clave de partición { "x" : 2 } -->> { "x" : 4 } está 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 algunas instancias, MongoDB no puede dividir el fragmento que ya no es jumbo, como un fragmento con un rango de valor de la clave de partición único. Por lo tanto, no puedes dividir el fragmento para limpiar la marca.

En tales casos, puede cambiar la clave de partición para que el fragmento pueda hacerse divisible o borrar manualmente la bandera.

MongoDB proporciona el refineCollectionShardKey comando. Mediante el comando refineCollectionShardKey, se puede perfeccionar la clave de partición de una colección añadiendo uno o varios campos sufijos a la clave existente. Al agregar nuevos campos a la clave de partición, los fragmentos jumbo indivisibles pueden volverse divisibles.

1

Conecta mongosh a un mongos.

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 para la colección particionada test.orders, tanto el fragmento con el rango de clave de partición { "status" : "A" } -->> { "status" : "D" } como el fragmento con el rango { "status" : "D" } -->> { "status" : "P" } están jumbo.

--- 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, agregue los campos order_id y customer_id como un sufijo a la clave de partición actual; es decir, la clave de partición será { status: 1, order_id: 1, customer_id: 1 } después de la refinación.

  1. Primero, create the index para admitir la clave de partición { 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 consideraciones de índice adicionales para refinar la clave de partición, consulta Consideraciones de índices.

  2. En la base de datos admin, ejecute el comando refineCollectionShardKey para agregar los campos order_id y customer_id 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 partición, puede que no todos los documentos de la colección tengan el/los campo(s) sufijo(s). Para rellenar los campos de clave de partición faltantes, consulte Campos de clave de partición faltantes.

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

Utiliza este método solo si el método preferido no es aplicable.

Para borrar manualmente la marca, use los siguientes pasos:

1

Conecta mongosh a un mongos.

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 el rango de la clave de partición { "x" : 2 } -->> { "x" : 3 } está 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 find documento con clave de partición y valor contenido en el fragmento jumbo:

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

    Nota

    Si la colección utiliza una clave de partición con hash, no utilices el campo find con clearJumboFlag. Para clave de partición con hash, usa el campo bounds en su lugar.

Volver

Eliminar fragmentos

En esta página