Zusammenführen von Partitionen in Azure Cosmos DB (Vorschau)

GILT FÜR: NoSQL MongoDB

Das Zusammenführen von Partitionen in Azure Cosmos DB (Vorschau) ermöglicht es Ihnen, die Anzahl der physischen Partitionen, die für Ihren Container verwendet werden, an Ort und Stelle zu reduzieren. Beim Zusammenführen können die physischen Partitionen von Containern mit fragmentiertem Durchsatz (geringe RU/s pro Partition) oder fragmentiertem Speicher (wenig Speicher pro Partition) überarbeitet werden. Wenn der Durchsatz eines Containers hochskaliert wurde und wieder herunterskaliert werden muss, kann die Zusammenführung dazu beitragen, Probleme im Zusammenhang mit Durchsatzfragmentierung zu beheben. Wenn für die gleiche Menge bereitgestellter RU/s weniger physische Partitionen vorhanden sind, steht jeder physischen Partition mehr von den gesamten RU/s zur Verfügung. Die Minimierung von Partitionen verringert die Wahrscheinlichkeit einer Ratenbegrenzung, wenn eine große Datenmenge aus einem Container entfernt wird und die RU/s pro Partition niedrig sind. Die Zusammenführung kann dazu beitragen, nicht verwendete oder leere Partitionen zu beseitigen und Speicherfragmentierungsprobleme effektiv zu beheben.

Erste Schritte

Navigieren Sie zur Seite Features in Ihrem Azure Cosmos DB-Konto, um mit der Verwendung der Partitionszusammenführung zu beginnen. Wählen Sie das Feature Partitionszusammenführung (Vorschau) aus und aktivieren Sie es.

Vergewissern Sie sich vor dem Aktivieren des Features, dass Ihre Azure Cosmos DB-Konten alle Berechtigungskriterien für die Vorschau erfüllen. Nachdem Sie das Feature aktiviert haben, dauert es 15 bis 20 Minuten, bis es verfügbar ist.

Achtung

Wenn die Zusammenführung für ein Konto aktiviert ist, sind für das Konto nur noch Anforderungen ab der .NET SDK-Version >= 3.27.0 oder Java SDK >= 4.42.0 oder Azure Cosmos DB Spark-Connector > = 4.18.0 zulässig, unabhängig davon, ob gerade Zusammenführungen durchgeführt werden. Anforderungen von anderen SDKs (älteres .NET-SDK, älteres Java-SDK, beliebiges JavaScript-SDK, beliebiges Python-SDK, beliebiges Go-SDK) oder von nicht unterstützten Connectors (Azure Data Factory, Azure Search, Azure Functions-Erweiterung <=3.x, Azure Stream Analytics und andere) werden blockiert und fehlschlagen. Vergewissern Sie sich, dass Sie ein Upgrade auf eine unterstützte SDK-Version durchgeführt haben, bevor Sie das Feature aktivieren. Wenn das Feature aktiviert oder deaktiviert wird, kann es 15 bis 20 Minuten dauern, bis dies innerhalb des gesamten Kontos weitergegeben wurde. Wenn Sie planen, das Feature zu deaktivieren, nachdem Sie es verwendet haben, kann es 15 bis 20 Minuten dauern, bis Anforderungen von SDKs und Konnektoren, die für die Zusammenführung nicht unterstützt werden, wieder zulässig sind.

Screenshot of Features pane and Partition merge feature.

Um zu überprüfen, ob ein Azure Cosmos DB-Konto für die Vorschau berechtigt ist, können Sie die integrierte Berechtigungsprüfung im Azure-Portal verwenden. Navigieren Sie auf der Übersichtsseite Ihres Azure Cosmos DB-Kontos im Azure-Portal zu Diagnose und Problemlösung -> Durchsatz und Skalierung ->Partitionszusammenführung. Führen Sie die Berechtigungsprüfung für die Vorschaudiagnose für die Partitionszusammenführung aus.

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

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

Identifizieren von Containern zum Zusammenführen

Container, die diese beide Bedingungen erfüllen, werden von der Zusammenführung von Partitionen profitieren:

  • Bedingung 1: Die aktuelle RU/s pro physischer Partition beträgt <3.000 RU/s
  • Bedingung 2: Der aktuelle durchschnittliche Speicher in GB pro physischer Partition beträgt <20 GB

Bedingung 1 tritt häufig auf, wenn Sie zuvor die RU/s (oft für eine Datenerfassung) hochskaliert haben und jetzt im stabilen Zustand herunterskalieren möchten. Bedingung 2 tritt häufig auf, wenn Sie TTL/ein großes Datenvolumen löschen und nicht verwendete Partitionen verlassen.

Bedingung 1

Um die aktuellen RU/s pro physischer Partition zu bestimmen, navigieren Sie aus Ihrem Cosmos-Konto zu Metriken. Wählen Sie die Metrik Durchsatz der physischen Partition aus, und filtern Sie sie auf Ihre Datenbank und Ihren Container. Wenden Sie die Teilung durch PhysicalPartitionId an.

Bei Containern, die Autoskalierung verwenden, zeigt diese Metrik die derzeit auf jeder physischen Partition bereitgestellten maximalen RU/s an. Bei Containern mit manuellem Durchsatz zeigt diese Metrik die manuellen RU/s auf jeder physischen Partition an.

Im folgenden Beispiel sehen wir einen Container mit Autoskalierung, der über 5000 RU/s (Skalierung zwischen 500 und 5000 RU/s) verfügt. Er verfügt über 1.000 physische Partitionen, von denen jede 1.000 RU/s aufweist.

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

Bedingung 2

Um den aktuellen durchschnittlichen Speicher pro physischer Partition zu ermitteln, ermitteln Sie zunächst den gesamten Speicher (Daten + Index) des Containers.

Navigieren Sie zu Erkenntnisse>Speicher>Daten- & Indexnutzung. Der Gesamtspeicher ist die Summe aus Daten und Indexverwendung. Im folgenden Beispiel weist der Container insgesamt 74 GB Speicher auf.

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

Als Nächstes ermitteln Sie die Gesamtzahl der physischen Partitionen. Diese Metrik ist die eindeutige Anzahl von PhysicalPartitionIds im Diagramm PhysicalPartitionThroughput aus Bedingung 1. In unserem Beispiel haben wir fünf physische Partitionen.

Berechnen Sie schließlich: Gesamtspeicher in GB / Anzahl physischer Partitionen. In unserem Beispiel haben wir einen Durchschnittswert von (74 GB / fünf physische Partitionen =) 14,8 GB pro physische Partition.

Basierend auf Bedingungen 1 und 2 kann unser Container potenziell von der Zusammenführung von Partitionen profitieren.

Zusammenführen physischer Partitionen

Wenn das Flag -WhatIf in PowerShell übergeben wird, führt Azure Cosmos DB eine Simulation durch und gibt das erwartete Ergebnis der Zusammenführung zurück. Dieses Ergebnis wird zurückgegeben, obwohl die Zusammenführung selbst nicht ausgeführt wird. Wird das Flag nicht übergeben, wird die Zusammenführung für die Ressource ausgeführt. Nach der Zusammenführung gibt der Befehl den aktuellen Speicher in KB pro physischer Partition nach der Zusammenführung aus.

Tipp

Es empfiehlt sich, vor der Zusammenführung Ihre bereitgestellten RU/s (entweder manuelle RU/s oder automatisch skalierte maximale RU/s) bestmöglich auf die gewünschten RU/s im stabilen Zustand nach der Zusammenführung festzulegen, damit vom System ein effizientes Partitionslayout berechnet werden kann.

Verwenden Sie Install-Module, um das Modul Az.CosmosDB mit aktivierten Vorabfeatures zu installieren.

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

Verwenden Sie bei Containern für bereitgestellten DurchsatzInvoke-AzCosmosDBSqlContainerMerge zusammen mit dem Parameter -WhatIf, um eine Vorschau der Zusammenführung anzuzeigen, ohne den Vorgang tatsächlich auszuführen.

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

Sie starten die Zusammenführung, indem Sie denselben Befehl ohne den -WhatIf-Parameter ausführen.

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

Starten Sie für Datenbanken mit gemeinsam genutztem Durchsatz die Zusammenführung mithilfe von az cosmosdb mongodb database merge.

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

Überwachen von Zusammenführungsvorgängen

Die Partitionszusammenführung ist ein zeitintensiver Vorgang, und es gibt keine SLA für die zulässige Dauer des Vorgangs. Die Dauer hängt von der Datenmenge im Container und der Anzahl der physischen Partitionen ab. Es wird empfohlen, mindestens 5-6 Stunden für die Zusammenführung einzuplanen.

Während die Partitionszusammenführung für den Container ausgeführt wird, wird der aktive Zusammenführungsvorgang abgebrochen, wenn Sie die Containereinstellungen (TTL, Indizierungsrichtlinie, eindeutige Schlüssel usw.) ändern. Wenn Sie die RU/s während einer aktiven Zusammenführung erhöhen, wird der ausgeführte Zusammenführungsvorgang abgebrochen, und die RU/s Ihres Containers werden mit dem neuen Wert aktualisiert. Je nach angeforderten RU/s kann das zentrale Hochskalieren sofort erfolgen oder länger dauern. Wenn Sie die RU/s während einer aktiven Zusammenführung verringern, werden die RU/s sofort auf den neuen Wert für die RU/s aktualisiert. Die ausgeführte Zusammenführung wird fortgesetzt, wobei die Anzahl der Zielpartitionen auf der Grundlage der zum Zeitpunkt der Auslösung der Zusammenführung festgelegten RU/s gleich bleibt. Als bewährte Methode wird empfohlen, zu warten, bis der Zusammenführungsvorgang abgeschlossen ist, bevor Sie die Container- oder Durchsatzeinstellungen ändern.

Sie können nachverfolgen, ob die Zusammenführung noch ausgeführt wird, indem Sie das Aktivitätsprotokoll überprüfen und nach den Ereignissen Physische Partitionen einer MongoDB-Auflistung zusammenführen oder Physische Partitionen eines SQL-Containers zusammenführen filtern.

Einschränkungen

Im Folgenden sind die Einschränkungen des Zusammenführungsfeatures zu diesem Zeitpunkt aufgeführt.

Vorschauberechtigungskriterien

Zum Registrieren in der Vorschau muss Ihr Azure Cosmos DB-Konto alle der folgenden Kriterien erfüllen:

  • Ihr Azure Cosmos DB-Konto verwendet die API für NoSQL oder MongoDB mit Version >=3.6.
  • Das Azure Cosmos DB-Konto verwendet den bereitgestellten Durchsatz (manuelle Skalierung oder Autoskalierung). Die Zusammenführung gilt nicht für serverlose Konten.
  • Das Azure Cosmos DB-Konto ist ein Konto für eine einzelne Schreibregion (die Zusammenführung wird derzeit für Schreibkonten in mehreren Regionen nicht unterstützt).
  • Das Azure Cosmos DB-Konto verwendet keines der folgenden Features:
  • Wenn Sie die API für NoSQL verwenden, muss Ihre Anwendung das Azure Cosmos DB .NET v3 SDK (Version 3.27.0 oder höher) oder das Java v4 SDK (Version 4.42.0 oder höher) verwenden. Wenn die Zusammenführungsvorschau für Ihr Konto aktiviert ist, akzeptiert das Konto keine Anforderungen, die nicht von .NET/Java-SDKs oder die von älteren .NET/Java SDK-Versionen gesendet werden.
    • Es gibt keine SDK- oder Treiberanforderungen für die Verwendung des Features mit der API für MongoDB.
  • Das Azure Cosmos DB-Konto verwendet keine derzeit nicht unterstützten Connectors:
    • Azure Data Factory
    • Azure Stream Analytics
    • Logic Apps
    • Azure Functions-Erweiterung <= 3.x (Azure Functions Erweiterung 4.0 und höher sind unterstützt)
    • Azure Search
    • Azure Cosmos DB-Spark-Connector < 4.18.0
    • Jede Drittanbieterbibliothek oder jedes Tool, das eine Abhängigkeit von einem Azure Cosmos DB SDK aufweist, das nicht in .NET v3 SDK >= v3.27.0 oder Java v4 SDK >= 4.42.0 vorliegt

Kontoressourcen und Konfiguration

  • Die Zusammenführung ist nur für API-für-NoSQL- und -MongoDB-Konten verfügbar. Bei Konten vom Typ „API für MongoDB“ muss mindestens die MongoDB-Kontoversion 3.6 verwendet werden.
  • Die Zusammenführung ist nur für Konten mit Schreibzugriff auf eine einzelne Region verfügbar. Konten mit Schreibzugriff auf mehrere Regionen werden nicht unterstützt.
  • Konten, die Zusammenführungsfunktionen verwenden, können diese Features ebenfalls nicht verwenden (wenn diese Features einem Konto mit aktivierter Zusammenführung hinzugefügt werden, kann das Konto keine >Ressourcen zusammenführen):
  • Nachdem ein Container zusammengeführt wurde, ist es nicht möglich, den Änderungsfeed mit der Startzeit zu lesen. Die zukünftige Unterstützung für dieses Feature ist geplant.

SDK-Anforderungen (nur API für NoSQL)

Konten mit aktiviertem Zusammenführungsfeature werden nur bei Verwendung der neuesten Version des .NET v3 SDK oder Java v4 SDK unterstützt. Wenn das Feature für Ihr Konto aktiviert ist (unabhängig davon, ob Sie die Zusammenführung verwenden), darf das Konto nur mit dem unterstützten SDK verwendet werden. Anforderungen, die von anderen SDKs oder älteren Versionen gesendet werden, werden nicht akzeptiert. Solange Sie das unterstützte SDK verwenden, kann Ihre Anwendung während einer laufenden Zusammenführung weiter ausgeführt werden.

Hier finden Sie die neueste Version des unterstützten SDKs:

SDK Unterstützte Versionen Link zum Paket-Manager
.NET SDK v3 >= 3.27.0 https://www.nuget.org/packages/Microsoft.Azure.Cosmos
Java SDK v4 >= 4.42.0 https://mvnrepository.com/artifact/com.azure/azure-cosmos

Die Unterstützung anderer SDKs ist für die Zukunft geplant.

Tipp

Bevor Sie sich für die Vorschau registrieren, sollten Sie sicherstellen, dass Ihre Anwendung aktualisiert wurde, sodass sie eine kompatible SDK-Version verwenden kann. Wenn Sie ein Legacy-SDK verwenden, befolgen Sie den entsprechenden Migrationsleitfaden:

Nicht unterstützte Connectors

Wenn Sie sich für die Vorschau registrieren, funktionieren die folgenden Connectors nicht.

  • Azure Data Factory¹
  • Azure Stream Analytics¹
  • Logic Apps¹
  • Azure Functions-Erweiterung <= 3.x (Azure Functions Erweiterung 4.0 und höher sind unterstützt) ¹
  • Azure Search¹
  • Azure Cosmos DB-Spark-Connector < 4.18.0
  • Jede Drittanbieterbibliothek oder jedes Tool, das eine Abhängigkeit von einem Azure Cosmos DB SDK aufweist, das nicht in .NET v3 SDK >= v3.27.0 oder Java v4 SDK >= 4.42.0 vorliegt

¹ Die Unterstützung dieser Connectors ist für die Zukunft geplant.

Nächste Schritte

  • Weitere Informationen zur Verwendung der Azure CLI mit Azure Cosmos DB finden Sie hier.
  • Weitere Informationen zur Verwendung von Azure PowerShell mit Azure Cosmos DB finden Sie hier.
  • Weitere Informationen zur Partitionierung in Azure Cosmos DB finden Sie hier.