Misurare le prestazioni di Azure Cosmos DB for NoSQL con un framework di benchmarking

Oggi più che mai sono disponibili più opzioni sul tipo di database da usare con il carico di lavoro dei dati. Uno dei fattori chiave per la selezione di un database è rappresentato dalle prestazioni del database o del servizio, ma le prestazioni di benchmarking possono essere complesse e soggette a errori. Il framework di benchmarking per database di Azure semplifica il processo di misurazione delle prestazioni con gli strumenti di benchmarking open source più diffusi, con ricette a basso attrito che implementano procedure consigliate comuni. In Azure Cosmos DB for NoSQL il framework implementa procedure consigliate per Java SDK e usa lo strumento open source YCSB. In questa guida si usa questo framework di benchmarking per implementare un carico di lavoro di lettura e acquisire così familiarità con il framework.

Prerequisiti

Creare risorse dell'account Azure Cosmos DB

Prima di tutto, si creano un database e un contenitore nell'account API esistente per NoSQL.

  1. Passare all'account API esistente per NoSQL nel portale di Azure.

  2. Nel menu della risorsa selezionare Esplora dati.

    Screenshot of the Data Explorer option highlighted in the resource menu.

  3. Nella pagina Esplora dati selezionare l'opzione Nuovo contenitore nella barra dei comandi.

    Screenshot of the New Container option in the Data Explorer command bar.

  4. Nella finestra di dialogo Nuovo contenitore creare un nuovo contenitore con le impostazioni seguenti:

    Impostazione Valore
    ID database ycsb
    Tipo di velocità effettiva del database Manualee
    Quantità di velocità effettiva del database 400
    ID contenitore usertable
    Chiave di partizione /id

    Screenshot of the New Container dialog on the Data Explorer page.

Distribuire il framework di benchmarking in Azure

A questo punto si usa un modello di Azure Resource Manager per distribuire il framework di benchmarking in Azure con la ricetta di lettura predefinita.

  1. Distribuire il framework di benchmarking usando un modello di Azure Resource Manager disponibile in questo collegamento.

    Deploy to Azure button.

  2. Nella pagina Distribuzione personalizzata, i parametri seguenti

    Screenshot of the Custom Deployment page with parameters values filled out.

  3. Selezionare Rivedi e crea e quindi Crea per distribuire il modello.

  4. Attendere il completamento della distribuzione.

    Suggerimento

    Per il completamento della distribuzione sarà necessario attendere 5-10 minuti.

Visualizzare i risultati del benchmark

A questo punto, è possibile usare l'account di Archiviazione di Azure esistente per controllare lo stato del processo di benchmark e visualizzare i risultati aggregati. Lo stato viene archiviato usando una tabella di archiviazione e i risultati vengono aggregati in un BLOB di archiviazione usando il formato CSV.

  1. Passare all'account di Archiviazione di Azure esistente nel portale di Azure.

  2. Passare a una tabella di archiviazione denominata ycsbbenchmarkingmetadata e individuare l'entità con una chiave di partizione di ycsb_sql.

    Screenshot of the ycsbbenchmarkingMetadata table in a storage account.

  3. Osservare il campo JobStatus dell'entità tabella. Inizialmente, lo stato del processo è Started e include un timestamp nella proprietà JobStartTime, ma non la proprietà JobFinishTime.

  4. Attendere che il processo abbia lo stato Finished e includa un timestamp nella proprietà JobFinishTime.

    Suggerimento

    Per terminare il processo sono necessari circa 20-30 minuti.

  5. Passare al contenitore di archiviazione nello stesso account con un prefisso di ycsbbenchmarking-*. Osservare l'output e i BLOB di diagnostica per lo strumento.

    Screenshot of the container and output blobs from the benchmarking tool.

  6. Aprire il BLOB aggregation.csv e osservare il contenuto. A questo punto dovrebbe essere presente un set di dati CSV con risultati aggregati di tutti i client di benchmark.

    Screenshot of the content of the aggregation results blob.

    Operation,Count,Throughput,Min(microsecond),Max(microsecond),Avg(microsecond),P9S(microsecond),P99(microsecond)
    READ,180000,299,706,448255,1079,1159,2867
    

Ricette

Il framework di benchmarking per database di Azure include ricette per incapsulare le definizioni del carico di lavoro passate allo strumento di benchmarking sottostante per un'esperienza "a 1 clic". Le definizioni del carico di lavoro sono state progettate in base alle procedure consigliate pubblicate dal team di Azure Cosmos DB e dal team dello strumento di benchmarking. Le ricette sono state testate e convalidate per ottenere risultati coerenti.

È possibile prevedere le latenze seguenti per tutte le ricette di lettura e scrittura nel repository GitHub.

  • Latenza lettura

    Diagram of the typical read latency averaging around 1 millisecond to 2 milliseconds.

  • Latenza scrittura

    Diagram of the typical write latency averaging around 4 milliseconds.

Problemi comuni

Questa sezione include gli errori comuni che possono verificarsi durante l'esecuzione dello strumento di benchmarking. I log degli errori per lo strumento sono in genere disponibili in un contenitore all'interno dell'account di Archiviazione di Azure.

Screenshot of container and blobs in a storage account.

  • Se i log non sono disponibili nell'account di archiviazione, questo problema è in genere causato da una stringa di connessione di archiviazione errata o mancante. In questo caso, questo errore viene elencato nel file agent.out all'interno della cartella /home/benchmarking della macchina virtuale client.

    Error while accessing storage account, exiting from this machine in agent.out on the VM
    
  • Questo errore è elencato nel file agent.out sia nella macchina virtuale client che nell'account di archiviazione se l'URI dell'endpoint di Azure Cosmos DB non è corretto o non raggiungibile.

    Caused by: java.net.UnknownHostException: rtcosmosdbsss.documents.azure.com: Name or service not known 
    
  • Questo errore è elencato nel file agent.out sia nella macchina virtuale client che nell'account di archiviazione se la chiave di Azure Cosmos DB non è corretta.

    The input authorization token can't serve the request. The wrong key is being used….
    

Passaggi successivi