Unire partizioni in Azure Cosmos DB (anteprima)

SI APPLICA A: Nosql Mongodb

L'unione di partizioni in Azure Cosmos DB (anteprima) consente di ridurre il numero di partizioni fisiche usate per il contenitore. Con l'unione, i contenitori frammentati nella velocità effettiva (con ur/sec ridotto per partizione) o l'archiviazione (con spazio di archiviazione ridotto per partizione) possono avere le partizioni fisiche rielaborate.With merge, containers that are fragmented in throughput (have low UR/s per partition) or storage (have low storage per partition) can have their physical partitions reworked. Se la velocità effettiva di un contenitore è stata ridimensionata e deve essere ridotta, l'unione può aiutare a risolvere i problemi di frammentazione della velocità effettiva. Per la stessa quantità di UR/sec di cui è stato effettuato il provisioning, la presenza di meno partizioni fisiche significa che ogni partizione fisica ottiene più ur/sec complessive. Ridurre al minimo le partizioni riduce la probabilità di limitare la frequenza se una grande quantità di dati viene rimossa da un contenitore e le UR/sec per partizione sono basse. L'unione consente di cancellare le partizioni inutilizzate o vuote, risolvendo in modo efficace i problemi di frammentazione dell'archiviazione.

Attività iniziali

Per iniziare a usare l'unione di partizioni, passare alla pagina Funzionalità nell'account Azure Cosmos DB. Selezionare e abilitare la funzionalità Unione partizione (anteprima).

Prima di abilitare la funzionalità, verificare che gli account Azure Cosmos DB soddisfino tutti i criteri di idoneità dell'anteprima. Dopo aver abilitato la funzionalità, l'applicazione richiede 15-20 minuti.

Attenzione

Quando l'unione è abilitata in un account, solo le richieste da .NET SDK versione >= 3.27.0 o Java SDK >= 4.42.0 o connettore Spark di Azure Cosmos DB = 4.18.0 saranno consentite >nell'account, indipendentemente dal fatto che le operazioni di unione siano in corso o meno. Le richieste da altri SDK (versione precedente di .NET SDK, Java SDK precedente, JavaScript SDK, qualsiasi SDK Python, qualsiasi SDK Go) o connettori non supportati (Azure Data Factory, Ricerca di Azure, Funzioni di Azure extension <= 3.x, Analisi di flusso di Azure e altri) verranno bloccate e non riuscite. Assicurarsi di aver eseguito l'aggiornamento a una versione dell'SDK supportata prima di abilitare la funzionalità. Dopo aver abilitato o disabilitato la funzionalità, potrebbero essere necessari 15-20 minuti per propagarsi completamente all'account. Se si prevede di disabilitare la funzionalità quando non viene più usata, possono essere necessari 15-20 minuti prima che siano consentite richieste di SDK e connettori non supportati per l'unione.

Screenshot of Features pane and Partition merge feature.

Per verificare se un account Azure Cosmos DB è idoneo per l'anteprima, è possibile usare il controllo di idoneità predefinito nella portale di Azure. Nella pagina di panoramica dell'account Azure Cosmos DB nella portale di Azure passare a Diagnostica e risoluzione dei problemi ->Velocità effettiva e Ridimensionamento ->Unione partizione. Eseguire la diagnostica Verifica idoneità per l'anteprima unione partizioni.

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

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

Come identificare i contenitori da unire

I contenitori che soddisfano entrambe queste condizioni possono trarre vantaggio dall'unione di partizioni:

  • Condizione 1: le UR/sec correnti per ogni partizione fisica sono <3000 UR/sec
  • Condizione 2: l'archiviazione media corrente in GB per partizione fisica è <di 20 GB

La condizione 1 si verifica spesso quando è stata precedentemente ridimensionata l'UR/s (spesso per un inserimento di dati) e ora si vuole ridurre lo stato stabile. La condizione 2 si verifica spesso quando si elimina/TTL un volume elevato di dati, lasciando partizioni inutilizzate.

Condizione 1

Per determinare le UR/sec correnti per partizione fisica, dall'account Cosmos passare a Metriche. Selezionare la metrica Velocità effettiva partizione fisica e filtrare il database e il contenitore. Applicare la suddivisione per PhysicalPartitionId.

Per i contenitori che usano la scalabilità automatica, questa metrica mostra il provisioning massimo di UR/s in ogni partizione fisica. Per i contenitori che usano la velocità effettiva manuale, questa metrica mostra le UR/sec manuali in ogni partizione fisica.

Nell'esempio seguente è disponibile un contenitore di scalabilità automatica di cui è stato effettuato il provisioning con 5000 UR/sec (scalabilità compresa tra 500 e 5000 UR/sec). Ha cinque partizioni fisiche e ogni partizione fisica ha 1000 UR/s.

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

Condizione 2

Per determinare l'archiviazione media corrente per partizione fisica, trovare prima di tutto l'archiviazione complessiva (dati e indice) del contenitore.

Passare a Insights> Archiviazione> Data & Index Usage (Utilizzo indice e dati). L'archiviazione totale è la somma dei dati e dell'utilizzo dell'indice. Nell'esempio seguente il contenitore ha un totale di 74 GB di spazio di archiviazione.

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

Trovare quindi il numero totale di partizioni fisiche. Questa metrica è il numero distinto di PhysicalPartitionIds nel grafico PhysicalPartitionThroughput visualizzato nella condizione 1. Nell'esempio sono presenti cinque partizioni fisiche.

Infine, calcolare: spazio di archiviazione totale in GB/numero di partizioni fisiche. Nell'esempio è presente una media di (74 GB/cinque partizioni fisiche) = 14,8 GB per partizione fisica.

In base alle condizioni 1 e 2, il contenitore può trarre vantaggio dall'unione di partizioni.

Unione di partizioni fisiche

In PowerShell, quando il flag -WhatIf viene passato, Azure Cosmos DB esegue una simulazione e restituisce il risultato previsto dell'unione. Questo risultato viene restituito nonostante l'unione non sia in esecuzione. Quando il flag non viene passato, l'unione viene eseguita sulla risorsa. Al termine, il comando restituisce la quantità corrente di spazio di archiviazione in KB per partizione fisica dopo l'unione.

Suggerimento

Prima di eseguire un'unione, è consigliabile impostare le UR/sec di cui è stato effettuato il provisioning (UR/s manuale o numero massimo di UR/sec) il più vicino possibile al successivo post-merge dello stato stabile desiderato, per garantire che il sistema calcoli un layout di partizione efficiente.

Usare Install-Module per installare il modulo Az.CosmosDB con funzionalità non definitive abilitate.

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

Per i contenitori di velocità effettiva di cui è stato effettuato il provisioning, usare Invoke-AzCosmosDBSqlContainerMerge con il -WhatIf parametro per visualizzare in anteprima l'unione senza eseguire effettivamente l'operazione.

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

Avviare l'unione eseguendo lo stesso comando senza il -WhatIf parametro .

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

Per i database con velocità effettiva condivisa, avviare l'unione usando az cosmosdb mongodb database merge.

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

Monitorare le operazioni di merge

L'unione di partizioni è un'operazione a esecuzione prolungata e non esiste alcun contratto di servizio per quanto tempo è necessario per il completamento. Il tempo dipende dalla quantità di dati nel contenitore e dal numero di partizioni fisiche. È consigliabile consentire il completamento dell'unione almeno 5-6 ore.

Mentre l'unione delle partizioni è in esecuzione nel contenitore, se si modificano le impostazioni del contenitore (TTL, criteri di indicizzazione, chiavi univoci e così via), l'operazione di unione in corso verrà annullata. Se si aumentano le UR/sec durante l'esecuzione di un'unione, l'operazione di unione in corso verrà annullata e le UR/sec del contenitore verranno aggiornate con il nuovo valore. A seconda delle UR/sec richieste, la scalabilità orizzontale potrebbe richiedere più tempo. Se si riducono le UR/sec durante l'esecuzione di un'unione, le UR/sec verranno immediatamente aggiornate alle nuove UR/sec. L'unione in corso continuerà, con lo stesso numero di partizioni di destinazione in base alle UR/s impostate al momento dell'attivazione dell'unione. Come procedura consigliata, è consigliabile attendere il completamento dell'operazione di merge prima di modificare le impostazioni del contenitore o della velocità effettiva.

È possibile verificare se il merge è ancora in corso controllando il log attività e filtrando gli eventi Unisci le partizioni fisiche di una raccolta di MongoDB o Unisci le partizioni fisiche di un contenitore SQL.

Limiti

Di seguito sono riportate le limitazioni della funzionalità di unione in questo momento.

Criteri di idoneità per l'anteprima

Per eseguire la registrazione nell'anteprima, l'account Azure Cosmos DB deve soddisfare tutti i criteri seguenti:

  • L'account Azure Cosmos DB usa l'API per NoSQL o MongoDB con la versione >=3.6.
  • L'account Azure Cosmos DB usa la velocità effettiva con provisioning (manuale o con scalabilità automatica). L'unione non si applica agli account serverless.
  • L'account Azure Cosmos DB è un account di area a scrittura singola (l'unione non è attualmente supportata per gli account di scrittura in più aree).
  • L'account Azure Cosmos DB non usa alcuna delle funzionalità seguenti:
  • Se si usa l'API per NoSQL, l'applicazione deve usare Azure Cosmos DB .NET v3 SDK (versione 3.27.0 o successiva) o Java v4 SDK (versione 4.42.0 o successiva). Quando l'anteprima di tipo merge è abilitata nell'account, l'account non accetta le richieste inviate da SDK non .NET/Java o versioni precedenti di .NET/Java SDK.
    • Non sono previsti requisiti di SDK o dei driver per usare la funzionalità con l'API per MongoDB.
  • L'account Azure Cosmos DB non usa attualmente connettori non supportati:
    • Azure Data Factory
    • Analisi di flusso di Azure
    • App per la logica
    • estensione <Funzioni di Azure = 3.x (Funzioni di Azure estensione 4.0 e versioni successive è supportata)
    • Ricerca di Azure
    • Connettore < Spark di Azure Cosmos DB 4.18.0
    • Qualsiasi libreria o strumento di terze parti che ha una dipendenza da un SDK di Azure Cosmos DB che non è .NET v3 SDK >= v3.27.0 o Java v4 SDK >= 4.42.0

Risorse e configurazione dell'account

  • Merge è disponibile solo per gli account API per NoSQL e MongoDB. Per gli account API per MongoDB, la versione dell'account MongoDB deve essere 3.6 o successiva.
  • L'unione è disponibile solo per gli account di scrittura a singola area. Il supporto dell'account di scrittura in più aree non è disponibile.
  • Gli account che usano la funzionalità di unione non possono usare anche queste funzionalità (se queste funzionalità vengono aggiunte a un account abilitato per l'unione, l'account non può unire le risorse):
  • Dopo che un contenitore è stato unito, non è possibile leggere il feed di modifiche con l'ora di inizio. Il supporto per questa funzionalità è previsto per il futuro.

Requisiti dell'SDK (solo API per NoSQL)

Gli account con la funzionalità di unione abilitata sono supportati solo quando si usa la versione più recente di .NET v3 SDK o Java v4 SDK. Quando la funzionalità è abilitata nell'account (indipendentemente dal fatto che si esegua l'unione), è necessario usare solo l'SDK supportato usando l'account . Le richieste inviate da altri SDK o versioni precedenti non vengono accettate. Se si usa l'SDK supportato, l'applicazione può continuare a essere eseguita mentre è in corso un'unione.

Trovare la versione più recente dell'SDK supportato:

SDK Versioni supportate Collegamento di Gestione pacchetti
.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

Il supporto per altri SDK è previsto per il futuro.

Suggerimento

Assicurarsi che l'applicazione sia stata aggiornata per usare una versione compatibile dell'SDK prima della registrazione nell'anteprima. Se si usa un SDK legacy, seguire la guida alla migrazione appropriata:

Connettori non supportati

Se si esegue la registrazione nell'anteprima, i connettori seguenti hanno esito negativo.

  • Azure Data Factory ¹
  • Analisi di flusso di Azure ¹
  • App per la logica ¹
  • Funzioni di Azure'estensione = 3.x (estensione <Funzioni di Azure 4.0 e versioni successive è supportata) ¹
  • Ricerca di Azure ¹
  • Connettore < Spark di Azure Cosmos DB 4.18.0
  • Qualsiasi libreria o strumento di terze parti che ha una dipendenza da un SDK di Azure Cosmos DB che non è .NET v3 SDK >= v3.27.0 o Java v4 SDK >= 4.42.0

Il supporto di questi connettori è previsto per il futuro.

Passaggi successivi