Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /
Administración

Despejado 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

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

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

Usa tanto sh.splitAt() como sh.splitFind() para dividir el fragmento jumbo.

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

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

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 los rangos de zonas para incorporar los nuevos campos sin modificar los valores de rango de los campos clave existentes. Es decir, el refinamiento de la clave de partición no afecta inmediatamente la distribución de los fragmentos entre las particiones o zonas. Cualquier futura división de fragmentos o migración ocurre como parte de las operaciones rutinarias de particionado.

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 partición, asegúrese de que todos o la mayoría de los documentos de la colección tengan los campos 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

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

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 datos, ejecuta el clearJumboFlag, pasando el namespace de la colección particionada y uno de los siguientes:

  • los límites del fragmento jumbo:

    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

Remover particiones

En esta página