Fusionner des partitions dans Azure Cosmos DB (préversion)

S’APPLIQUE À : NoSQL MongoDB

La fusion de partitions dans Azure Cosmos DB (préversion) vous permet de réduire le nombre de partitions physiques utilisées pour votre conteneur en place. Avec la fusion, les partitions physiques des conteneurs qui sont fragmentés en fonction du débit (RU/s faibles par partition) ou du stockage (stockage faible par partition) peuvent être remaniées. Si le débit d’un conteneur a fait l’objet d’un scale-up et qu’un scale-down doit être effectué, la fusion peut aider à résoudre les problèmes de fragmentation du débit. Pour une quantité de RU/s provisionnées égale, le fait d’avoir moins de partitions physiques signifie que chaque partition physique obtient plus de RU/s totales. La réduction des partitions réduit les risques de limitation de débit si une grande quantité de données est supprimée d’un conteneur et si le nombre de RU/s par partition est faible. La fusion peut aider à effacer les partitions inutilisées ou vides, en résolvant efficacement les problèmes de fragmentation de stockage.

Prise en main

Pour commencer à utiliser la fusion de partitions, accédez à la page Fonctionnalités de votre compte Azure Cosmos DB. Sélectionnez et activez la fonctionnalité Fusion de partitions (préversion).

Avant d’activer la fonctionnalité, vérifiez que votre ou vos comptes Azure Cosmos DB remplissent tous les critères d’éligibilité à la préversion. La fonctionnalité prend effet 15 à 20 minutes après son activation.

Attention

Quand la fusion est activée pour un compte, seules les requêtes de la version >=3.27.0 du Kit de développement logiciel (SDK) .NET, la version >= 4.42.0 du Kit de développement logiciel (SDK) Java ou la version >= 4.18.0 du connecteur Spark Azure Cosmos DB sont autorisées pour le compte, que des fusions soient en cours ou non. Les requêtes des autres Kits de développement logiciel (SDK) (SDK .NET plus anciens, SDK Java plus ancien, tout SDK JavaScript, tout SDK Python, tout SDK Go) ou des connecteurs non pris en charge (Azure Data Factory, Recherche Azure, Azure Functionsextension <= 3.x, Azure Stream Analytics, etc.) sont bloquées et échouent. Veillez à effectuer une mise à niveau vers une version du SDK prise en charge avant d’activer la fonctionnalité. Une fois que vous avez activé ou désactivé la fonctionnalité, la propagation complète sur le compte peut prendre entre 15 et 20 minutes. Si vous envisagez de désactiver la fonctionnalité quand vous avez fini de l’utiliser, l’autorisation des demandes de SDK et connecteurs qui ne sont pas pris en charge pour la fusion peut prendre 15 à 20 minutes.

Screenshot of Features pane and Partition merge feature.

Pour vérifier si un compte Azure Cosmos DB est éligible à la préversion, vous pouvez utiliser le vérificateur d’éligibilité intégré dans le portail Azure. À partir de la page de vue d’ensemble de votre compte Azure Cosmos DB dans le portail Azure, accédez à Diagnostiquer et résoudre les problèmes ->Débit et mise à l’échelle ->Fusion de partitions. Exécutez le diagnostic Vérifier l’éligibilité à la préversion de la fusion de partitions.

Screenshot of Throughput and Scaling content in Diagnose and solve issues page.

Screenshot of merge eligibility check with table of all preview eligibility criteria.

Comment identifier les conteneurs à fusionner

Les conteneurs qui remplissent ces deux conditions sont susceptibles de tirer parti de la fusion de partitions :

  • Condition 1 : le nombre actuel de RU/s par partition physique est inférieur à 3000 RU/s
  • Condition 2 : le volume actuel de stockage moyen par partition physique en Go est inférieur à 20 Go

La condition 1 se présente souvent quand vous avez précédemment effectué un scale-up de RU/s (souvent pour une ingestion de données) et que vous souhaitez maintenant effectuer un scale-down en état stable. La condition 2 se présente souvent quand vous supprimez/faites expirer (TTL) une grande quantité de données, laissant ainsi des partitions inutilisées.

Condition 1

Pour déterminer le nombre actuel de RU/s par partition physique, à partir de votre compte Cosmos, accédez à Métriques. Sélectionnez la métrique Débit de partition physique et filtrez sur votre base de données et votre conteneur. Appliquez le fractionnement par PhysicalPartitionId.

Pour les conteneurs utilisant la mise à l’échelle automatique, cette métrique affiche le nombre maximal de RU/s provisionnées sur chaque partition physique. Pour les conteneurs utilisant un débit manuel, cette métrique affiche le nombre de RU/s manuelles sur chaque partition physique.

Dans l’exemple ci-dessous, nous avons un conteneur à mise à l’échelle automatique provisionné avec 5 000 RU/s (mise à l’échelle allant de 500 à 5 000 RU/s). Il possède cinq partitions physiques avec pour chacune 1 000 RU/s.

Screenshot of Azure Monitor metric Physical Partition Throughput in Azure portal.

Condition 2

Pour déterminer le volume actuel de stockage moyen par partition physique, recherchez d’abord le volume de stockage global (données + index) du conteneur.

Accédez à Insights>Stockage>Utilisation des données et de l’index. Le volume de stockage total correspond à la somme de l’utilisation des données et de l’index. Dans l’exemple ci-dessous, le conteneur dispose d’un volume de stockage total de 74 Go.

Screenshot of Azure Monitor storage (data + index) metric for container in Azure portal.

Ensuite, recherchez le nombre total de partitions physiques. Cette métrique est le nombre distinct de PhysicalPartitionIds dans le graphique PhysicalPartitionThroughput que nous avons vu dans la section Condition 1. Dans notre exemple, nous avons cinq partitions physiques.

Enfin, faites le calcul suivant : volume de stockage total en Go / nombre de partitions physiques. Dans notre exemple, nous avons en moyenne (74 Go / cinq partitions physiques) = 14,8 Go par partition physique.

D’après les conditions 1 et 2, notre conteneur peut potentiellement tirer bénéfice de la fusion de partitions.

Fusion des partitions physiques

Dans PowerShell, quand l’indicateur -WhatIf est passé, Azure Cosmos DB exécute une simulation et retourne le résultat attendu de la fusion. Ce résultat est retourné même si la fusion elle-même n’est pas en cours d’exécution. Quand l’indicateur n’est pas passé, la fusion s’exécute sur la ressource. Une fois terminé, la commande génère la quantité actuelle de stockage en Ko par partition physique après fusion.

Conseil

Avant d’exécuter une fusion, il est recommandé de définir vos RU/s provisionnées (RU/s manuelles ou RU/s max pour la mise à l’échelle automatique) à une valeur aussi proche que possible des RU/s à l’état stable souhaités après fusion, pour vous assurer que le système calcule une disposition de partition efficace.

Utilisez Install-Module pour installer le module Az.CosmosDB avec les fonctionnalités de préversion activées.

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

Pour les conteneurs de débit approvisionné, utilisez Invoke-AzCosmosDBSqlContainerMerge avec le paramètre -WhatIf pour afficher un aperçu de la fusion sans effectuer réellement l’opération.

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

Démarrez la fusion en exécutant la même commande sans le paramètre -WhatIf.

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

Pour les bases de données à débit partagé, démarrez la fusion en utilisant az cosmosdb mongodb database merge.

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

Monitorer les opérations de fusion

La fusion de partitions est une opération longue et il n’y a pas de contrat SLA sur sa durée d’exécution. La durée dépend de la quantité de données dans le conteneur et du nombre de partitions physiques. Nous vous recommandons de pendre en compte au moins 5 à 6 heures pour l’exécution complète de la fusion.

Bien que la fusion de partitions s’exécute sur votre conteneur, si vous changez les paramètres de conteneur (TTL, stratégie d’indexation, clés uniques, etc.), l’opération de fusion en cours est annulée. Si vous augmentez vos RU/s quand une fusion est en cours d’exécution, l’opération de fusion en cours est annulée et les RU/s de votre conteneur sont mises à jour avec votre nouvelle valeur. Selon les RU/s demandées, votre scale-up peut être instantané ou prendre plus de temps. Si vous réduisez vos RU/s pendant qu’une fusion est en cours d’exécution, les RU/s sont instantanément mises à jour vers les nouvelles RU/s. La fusion en cours se poursuit, avec le même nombre de partitions cibles en fonction du nombre de RU/s défini au moment où la fusion a été déclenchée. Une bonne pratique est d’attendre que l’opération de fusion se termine avant de changer vos paramètres de conteneur ou de débit.

Vous pouvez voir si la fusion est toujours en cours en consultant le journal d’activité et en filtrant sur les événements Fusionner les partitions physiques d’une collection MongoDB ou Fusionner les partitions physiques d’un conteneur SQL.

Limites

Voici les limitations de la fonctionnalité de fusion pour le moment.

Critères d’éligibilité à la préversion

Pour vous inscrire à la préversion, votre compte Azure Cosmos DB doit répondre à tous les critères suivants :

  • Votre compte Azure Cosmos DB utilise l’API NoSQL ou MongoDB avec la version >=3.6.
  • Votre compte Azure Cosmos DB utilise un débit approvisionné (manuel ou avec mise à l’échelle automatique). La fusion ne s’applique pas aux comptes serverless.
  • Votre compte Azure Cosmos DB est un compte avec une seule région d’écriture (fusion non prise en charge actuellement pour les comptes avec plusieurs régions d’écriture).
  • Votre compte Azure Cosmos DB n’utilise aucune des fonctionnalités suivantes :
  • Si vous utilisez l’API pour NoSQL, votre application doit utiliser le Kit de développement logiciel (SDK) .NET v3 Azure Cosmos DB (version 3.27.0 ou ultérieure) ou le Kit de développement logiciel (SDK) Java v4 (version 4.42.0 ou ultérieure). Lorsque l’aperçu de fusion est activé sur votre compte, celui-ci n’accepte pas les demandes envoyées à partir de kits SDK non .NET/Java ou d’anciennes versions du Kit de développement logiciel (SDK) .NET/Java.
    • Il n’y a pas d’exigences de SDK ou de pilote pour utiliser la fonctionnalité avec l’API pour MongoDB.
  • Votre compte Azure Cosmos DB n’utilise aucun connecteur non pris en charge actuellement :
    • Azure Data Factory
    • Azure Stream Analytics
    • Logic Apps
    • Extension Azure Functions <= 3.x (l’extension Azure Functions 4.0 et ultérieure est prise en charge)
    • Recherche Azure
    • Connecteur Spark Azure Cosmos DB < 4.18.0
    • Toute bibliothèque ou tout outil tiers ayant une dépendance par rapport à un kit SDK Azure Cosmos DB autre que le kit .NET v3 SDK >= v3.27.0 ou Java v4 SDK >= 4.42.0

Ressources et configuration du compte

  • La fusion est disponible seulement pour les comptes d’API NoSQL et d’API MongoDB. Pour l’API pour les comptes MongoDB, la version du compte MongoDB doit être 3.6 ou ultérieure.
  • La fusion est disponible uniquement pour les comptes d’écriture dans une seule région. La prise en charge des compte d’écriture dans plusieurs régions n’est pas disponible.
  • Les comptes utilisant la fonctionnalité de fusion ne peuvent pas également utiliser ces fonctionnalités (si ces fonctionnalités sont ajoutées à un compte activant la fusion, le compte ne peut pas fusionner les ressources) :
  • Une fois qu’un conteneur est fusionné, vous ne pouvez pas lire le flux de modification avec l’heure de début. La prise en charge de cette fonctionnalité est prévue à l’avenir.

Exigences du kit de développement logiciel (SDK) (API NoSQL uniquement)

Les comptes pour lesquels la fonctionnalité de fusion est activée sont pris en charge uniquement dans la dernière version du SDK .NET v3 ou Java v4. Quand la fonctionnalité est activée sur votre compte (que vous exécutiez la fusion ou non), vous devez uniquement utiliser le kit SDK pris en charge à l’aide du compte. Les requêtes envoyées à partir d’autres kits de développement logiciel (SDK) ou de versions antérieures ne sont pas acceptées. Si vous utilisez le kit SDK pris en charge, votre application continue de s’exécuter pendant qu’une fusion est en cours.

Recherchez la dernière version du SDK pris en charge :

Kit SDK Versions prises en charge Lien du gestionnaire de package
Kit de développement logiciel (SDK) .NET v3 >= 3.27.0 https://www.nuget.org/packages/Microsoft.Azure.Cosmos
Kit SDK Java v4 >= 4.42.0 https://mvnrepository.com/artifact/com.azure/azure-cosmos

La prise en charge d’autres kits SDK est prévue ultérieurement.

Conseil

Vous devez vous assurer que votre application a été mise à jour pour utiliser une version compatible du kit SDK avant l’inscription à la préversion. Si vous utilisez un SDK hérité, suivez le guide de migration approprié :

Connecteurs non pris en charge

Si vous vous inscrivez à la préversion, les connecteurs suivants échouent.

  • Azure Data Factory ¹
  • Azure Stream Analytics ¹
  • Logic Apps ¹
  • Extension Azure Functions <= 3.x (l’extension Azure Functions 4.0 et ultérieure est prise en charge) ¹
  • Recherche Azure ¹
  • Connecteur Spark Azure Cosmos DB < 4.18.0
  • Toute bibliothèque ou tout outil tiers ayant une dépendance par rapport à un kit SDK Azure Cosmos DB autre que le kit .NET v3 SDK >= v3.27.0 ou Java v4 SDK >= 4.42.0

¹ La prise en charge de ces connecteurs est prévue ultérieurement.

Étapes suivantes