Leer en inglés

Compartir a través de


Combinación de particiones en Azure Cosmos DB (versión preliminar)

SE APLICA A: NoSQL MongoDB

La combinación de particiones en Azure Cosmos DB (versión preliminar) permite reducir el número de particiones físicas usadas con el contenedor local. La combinación permite rehacer las particiones físicas de los contenedores que presentan fragmentación de rendimiento (esto es, tienen una tasa de RU/s baja por partición) o de almacenamiento (esto es, tienen un almacenamiento bajo por partición). Si el rendimiento de un contenedor se ha escalado verticalmente y debe volver a reducirse, la combinación puede ayudar a resolver posibles problemas de fragmentación del rendimiento. Con una misma cantidad de RU/s aprovisionada, tener menos particiones físicas significa que cada partición física obtiene más de las RU/s generales. Reducir las particiones disminuye la posibilidad de limitar la velocidad si se quita una gran cantidad de datos de un contenedor y las unidades de solicitud por partición son bajas. La combinación puede ayudar a borrar particiones sin usar o vacías, lo que resuelve eficazmente problemas de fragmentación del almacenamiento.

Introducción

Para empezar a usar la combinación de particiones, vaya a la página Características de la cuenta de Azure Cosmos DB. Seleccione la característica Combinación de particiones (versión preliminar) y habilítela.

Antes de habilitar la característica, compruebe que las cuentas de Azure Cosmos DB cumplen todos los criterios de idoneidad de la versión preliminar. Una vez que haya habilitado la característica, tarda entre 15 y 20 minutos en surtir efecto.

Precaución

Cuando la combinación esté habilitada en una cuenta, solo se permitirán las solicitudes de la versión >= 3.27.0 del SDK de .NET, la versión >= 4.42.0 del SDK de Java o el conector >= 4.18.0 de Spark de Azure Cosmos DB en la cuenta, independientemente de si las combinaciones están en curso o no. Las solicitudes de otros SDK (SDK de .NET anterior, SDK de Java anterior, cualquier SDK de JavaScript, cualquier SDK de Python o cualquier SDK de Go) o de conectores no compatibles (Azure Data Factory, Azure Search, Azure Functionsextension <= 3.x, Azure Stream Analytics y otros) se bloquearán y producirán errores. Asegúrese de que ha actualizado a una versión de SDK compatible antes de habilitar la característica. Una vez habilitada o deshabilitada la característica, puede tardar entre 15 y 20 minutos en propagarse por completo a la cuenta. Si tiene previsto deshabilitar la característica después de completar su uso, puede tardar entre 15 y 20 minutos antes de que se permitan solicitudes de SDK y conectores que no son compatibles con la combinación.

Captura de pantalla del panel Características y la característica Combinación de particiones.

Para comprobar si una cuenta de Azure Cosmos DB es idónea para la versión preliminar, puede usar el comprobador de idoneidad integrado en Azure Portal. En la página de información general de la cuenta de Azure Cosmos DB de Azure Portal, vaya a Diagnóstico y solución de problemas:>Rendimiento y escalado>Combinación de particiones. Ejecute el diagnóstico Comprobar idoneidad para la versión preliminar de la combinación de particiones.

Captura de pantalla del contenido de Rendimiento y escalado en la página Diagnóstico y solución de problemas.

Captura de pantalla de la comprobación de idoneidad de combinación con la tabla de todos los criterios de idoneidad de versión preliminar.

Procedimiento para identificar los contenedores que se van a combinar

Es probable que los contenedores que cumplan estas dos condiciones se beneficien de la combinación de particiones:

  • Condición 1: la RU/s actual por partición física es <3000 RU/s.
  • Condición 2: el almacenamiento medio actual en GB por partición física es <20 GB.

La condición 1 se suele producir cuando ya ha escalado verticalmente la RU/s (a menudo para una ingesta de datos) y ahora quiere reducir verticalmente en estado estable. La condición 2 se suele producir al eliminar o TTL un gran volumen de datos, y dejar particiones sin usar.

Condición 1

Para determinar la RU/s actual por partición física, vaya a Métricas desde la cuenta de Cosmos. Seleccione la métrica Rendimiento de partición física y filtre por la base de datos y el contenedor. Aplique la división por PhysicalPartitionId.

En el caso de los contenedores que usan escalabilidad automática, esta métrica muestra las RU/s máximas aprovisionadas actualmente en cada partición física. En el caso de los contenedores que usan rendimiento manual, esta métrica muestra las RU/s manuales en cada partición física.

En el ejemplo siguiente, hay un contenedor con escalabilidad automática aprovisionado con 5000 RU/s (escala entre 500 y 5000 RU/s). Tiene cinco particiones físicas, cada una con 1000 RU/s.

Captura de pantalla de la métrica Rendimiento de partición física de Azure Monitor en Azure Portal.

Condición 2

Para determinar el almacenamiento medio actual por partición física, busque primero el almacenamiento general (datos e índice) del contenedor.

Vaya a Conclusiones>Almacenamiento>Uso de datos e índices. El almacenamiento total es la suma del uso de datos e índices. En el ejemplo siguiente, el contenedor tiene un total de 74 GB de almacenamiento.

Captura de pantalla de la métrica Almacenamiento (datos e índice) de Azure Monitor para el contenedor en Azure Portal.

A continuación, busque el número total de particiones físicas. Esta métrica muestra el número diferente de valores PhysicalPartitionIds en el gráfico PhysicalPartitionThroughput que hemos visto en la condición 1. En nuestro ejemplo, tenemos cinco particiones físicas.

Por último, calcule: Almacenamiento total en GB / número de particiones físicas. En nuestro ejemplo, tenemos un promedio de (74 GB / 5 particiones físicas) = 14,8 GB por partición física.

En función de las condiciones 1 y 2, el contenedor se podría beneficiar de la combinación de particiones.

Combinación de particiones físicas

En PowerShell, cuando se pasa la marca -WhatIf, Azure Cosmos DB ejecuta una simulación y devuelve el resultado esperado de la combinación. Este resultado se devuelve a pesar de que la propia combinación no se está ejecutando. Cuando no se pasa la marca, la combinación se ejecuta en el recurso. Cuando termine, el comando genera la cantidad actual de almacenamiento en KB por partición física después de la combinación.

Sugerencia

Antes de ejecutar una combinación, se recomienda establecer la tasa de RU/s aprovisionada (RU/s manual o RU/s máxima de escalabilidad automática) lo más cerca posible de la tasa de RU/s de estado fija que se pretende tras la combinación para, de este modo, garantizar que el sistema calcula un diseño de particiones eficaz.

Use Install-Module para instalar el módulo Az.CosmosDB con las características de versión preliminar habilitadas.

$parameters = @{
    Name = "Az.CosmosDB"
    AllowPrerelease = $true
    Force = $true
}
Install-Module @parameters

Para contenedores de rendimiento aprovisionados, use Invoke-AzCosmosDBSqlContainerMerge con el parámetro -WhatIf para obtener una vista previa de la combinación sin realizar realmente la operación.

$parameters = @{
    ResourceGroupName = "<resource-group-name>"
    AccountName = "<cosmos-account-name>"
    DatabaseName = "<cosmos-database-name>"
    Name = "<cosmos-container-name>"
    WhatIf = $true
}
Invoke-AzCosmosDBSqlContainerMerge @parameters

Inicie la combinación ejecutando el mismo comando sin el parámetro -WhatIf.

$parameters = @{
    ResourceGroupName = "<resource-group-name>"
    AccountName = "<cosmos-account-name>"
    DatabaseName = "<cosmos-database-name>"
    Name = "<cosmos-container-name>"
}
Invoke-AzCosmosDBSqlContainerMerge @parameters

Para las bases de datos de rendimiento compartido, inicie la combinación mediante az cosmosdb mongodb database merge.

az cosmosdb mongodb database merge \
	--account-name '<cosmos-account-name>'                               
	--name '<cosmos-database-name>'                                
	--resource-group '<resource-group-name>'

Supervisión de las operaciones de combinación

La combinación de particiones es una operación de larga duración y no hay ningún Acuerdo de Nivel de Servicio sobre cuánto tiempo se tarda en completarse. El tiempo depende de la cantidad de datos del contenedor y del número de particiones físicas. Se recomienda permitir que se completen al menos entre 5 y 6 horas para que se complete la combinación.

Mientras la combinación de particiones se ejecuta en el contenedor, si cambia la configuración del contenedor (TTL, directiva de indexación, claves únicas, etc.), se cancelará la operación de combinación en curso. Si aumenta las RU/s mientras se ejecuta una combinación, se cancelará la operación de combinación en curso y las RU/s del contenedor se actualizarán con el nuevo valor. Dependiendo de las RU/s solicitadas, el escalado vertical puede ser instantáneo o tardar más tiempo. Si reduce las RU/s mientras se ejecuta una combinación, las RU/s se actualizarán instantáneamente a las nuevas RU/s. La combinación en curso continuará, con el mismo recuento de particiones de destino en función de las RU/s establecidas en el momento en que se desencadenó la combinación. Como procedimiento recomendado, se recomienda esperar hasta que se complete la operación de combinación antes de cambiar la configuración del contenedor o del rendimiento.

Puede hacer un seguimiento si la combinación sigue en curso, compruebe el registro de actividad y filtre por los eventos Combine las particiones físicas de una colección de MongoDB o Combine las particiones físicas de un contenedor de SQL.

Limitaciones

A continuación se muestran las limitaciones de la característica de combinación en este momento.

Criterios de elegibilidad para la versión preliminar

Para inscribirse en la versión preliminar, la cuenta de Azure Cosmos DB debe cumplir todos los criterios siguientes:

  • La cuenta de Azure Cosmos DB usa la API para NoSQL o MongoDB con la versión >=3.6.
  • La cuenta de Azure Cosmos DB usa el rendimiento aprovisionado (escalado manual o automático). La combinación no se aplica a las cuentas sin servidor.
  • La cuenta de Azure Cosmos DB es una cuenta de región de escritura única (la combinación no se admite actualmente para las cuentas de escritura en varias regiones).
  • La cuenta de Azure Cosmos DB no usa ninguna de las siguientes características:
  • Si usa API para NoSQL, la aplicación debe usar el SDK de .NET v3 de Azure Cosmos DB (versión 3.27.0 o posterior) o el SDK de Java v4 (versión 4.42.0 o posterior). Cuando la versión preliminar de la combinación está habilitada en la cuenta, la cuenta no acepta las solicitudes enviadas desde SDK que no sean de .NET o Java o versiones anteriores del SDK de .NET o Java.
    • No hay ningún SDK o requisitos de controlador para usar la característica con la API para MongoDB.
  • La cuenta de Azure Cosmos DB no usa ningún conector no admitido actualmente:
    • Azure Data Factory
    • Azure Stream Analytics
    • Logic Apps
    • Extensión de Azure Functions <= 3.x (la extensión de Azure Functions 4.0 y posteriores son compatibles)
    • Azure Search
    • Conector de Spark de Azure Cosmos DB < 4.18.0
    • Cualquier biblioteca o herramienta de terceros que tenga una dependencia en un SDK de Azure Cosmos DB que no sea el SDK de .NET v3 >= v3.27.0 o el SDK de Java v4 >= 4.42.0

Configuración y recursos de la cuenta

  • La combinación solo está disponible para la API de NoSQL y cuentas de MongoDB. Respecto a la API de las cuentas de MongoDB, la versión de la cuenta de MongoDB debe ser 3.6 o superior.
  • La combinación solo está disponible para las cuentas de escritura de una sola región. No se admiten cuentas de escritura de varias regiones.
  • Las cuentas que usan la funcionalidad de combinación no pueden usar también estas características (si estas características se agregan a una cuenta habilitada para la combinación, la cuenta no puede combinar los recursos):
  • Después de combinar un contenedor, no es posible leer la fuente de cambios con la hora de inicio. La compatibilidad con esta función está prevista para el futuro.

Requisitos del SDK (solo API para NoSQL)

Las cuentas con la característica de combinación habilitada solo se admiten en la versión más reciente del SDK de .NET v3 o el SDK de Java v4. Cuando la característica está habilitada en la cuenta (independientemente de si se ejecuta la combinación), solo debe usar el SDK compatible a través de esa cuenta. No se aceptan las solicitudes enviadas desde otros SDK o desde versiones anteriores. Siempre que se use el SDK compatible, la aplicación podrá seguir ejecutándose mientras hay una combinación en curso.

Busque la versión más reciente del SDK compatible:

SDK Versiones compatibles Vínculo del administrador de paquetes
.NET SDK v3 >= 3.27.0 https://www.nuget.org/packages/Microsoft.Azure.Cosmos
SDK de Java v4 >= 4.42.0 https://mvnrepository.com/artifact/com.azure/azure-cosmos

Está previsto admitir otros SDK en el futuro.

Sugerencia

Antes de inscribirse en la versión preliminar, debe asegurarse de que la aplicación está actualizada para usar una versión del SDK compatible. Si usa un SDK heredado, siga la guía de migración adecuada:

Conectores no admitidos

Si se inscribe en la versión preliminar, se producen errores en los siguientes conectores.

  • Azure Data Factory ¹
  • Azure Stream Analytics ¹
  • Logic Apps ¹
  • Extensión de Azure Functions <= 3.x (la extensión de Azure Functions 4.0 y posteriores son compatibles) ¹
  • Azure Search ¹
  • Conector de Spark de Azure Cosmos DB < 4.18.0
  • Cualquier biblioteca o herramienta de terceros que tenga una dependencia en un SDK de Azure Cosmos DB que no sea el SDK de .NET v3 >= v3.27.0 o el SDK de Java v4 >= 4.42.0

¹ Está previsto admitir estos conectores en el futuro.

Pasos siguientes