Ottimizzare le prestazioni di AzCopy con Archiviazione di Azure
AzCopy è un'utilità della riga di comando che è possibile usare per copiare i BLOB o i file da e verso un account di archiviazione. Questo articolo illustra come ottimizzare le prestazioni.
Nota
Se si sta cercando contenuto per iniziare a usare AzCopy, vedere Introduzione ad AzCopy
È possibile eseguire il benchmark delle prestazioni e usare comandi e variabili di ambiente per trovare un compromesso ottimale tra le prestazioni e l'utilizzo delle risorse.
Eseguire test di benchmark
È possibile eseguire un test del benchmark delle prestazioni in contenitori BLOB o condivisioni file specifici per visualizzare le statistiche generali sulle prestazioni e identificare i colli di bottiglia delle prestazioni. È possibile eseguire il test caricando o scaricando i dati di test generati.
Usare il comando seguente per eseguire un test del benchmark delle prestazioni.
Sintassi
azcopy benchmark 'https://<storage-account-name>.blob.core.windows.net/<container-name>'
Esempio
azcopy benchmark 'https://mystorageaccount.blob.core.windows.net/mycontainer/myBlobDirectory?sv=2018-03-28&ss=bjqt&srs=sco&sp=rjklhjup&se=2019-05-10T04:37:48Z&st=2019-05-09T20:37:48Z&spr=https&sig=/SOVEFfsKDqRry4bk3qz1vAQFwY5DDzp2%2B/3Eykf/JLs%3D'
Suggerimento
In questo esempio gli argomenti path vengono racchiusi con virgolette singole (''). Usare virgolette singole in tutte le shell dei comandi, ad eccezione della Shell dei comandi di Windows (cmd.exe). Se si usa una Shell dei comandi di Windows (cmd.exe), racchiudere gli argomenti path con virgolette doppie ("") anziché virgolette singole ('').
Questo comando esegue un benchmark delle prestazioni caricando i dati di test in una destinazione specificata. I dati di test vengono generati in memoria, caricati nella destinazione, quindi eliminati dalla destinazione dopo il completamento del test. È possibile specificare il numero di file da generare e le dimensioni desiderate usando parametri di comando facoltativi.
Se si preferisce eseguire questo test scaricando i dati, impostare il parametro mode
su download
. Per informazioni dettagliate sulla documentazione di riferimento, vedere azcopy benchmark.
Ottimizzazione per un numero elevato di file
La velocità effettiva può diminuire durante il trasferimento di un numero elevato di file. Ogni operazione di copia viene convertita in una o più transazioni che devono essere eseguite nel servizio di archiviazione. Quando si trasferisce un numero elevato di file, prendere in considerazione il numero di transazioni che devono essere eseguite e qualsiasi potenziale impatto su tali transazioni può avere se si verificano altre attività nell'account di archiviazione contemporaneamente.
Per ottimizzare le prestazioni, è possibile ridurre le dimensioni di ogni processo limitando il numero di file copiati in un singolo processo. Per le operazioni di download e caricamento, aumentare la concorrenza in base alle esigenze, ridurre le attività del log e disattivare le funzionalità che comportano costi elevati per le prestazioni.
Ridurre le dimensioni di ogni processo
Per ottenere prestazioni ottimali, assicurarsi che ogni processo trasferisca meno di 10 milioni di file. I processi che trasferiscono più di 50 milioni di file possono comportare prestazioni scarse perché il meccanismo di rilevamento dei processi AzCopy comporta un sovraccarico significativo. Per ridurre il sovraccarico, è consigliabile suddividere processi di grandi dimensioni in quelli più piccoli.
Un modo per ridurre le dimensioni di un processo consiste nel limitare il numero di file interessati da un processo. A tale scopo, è possibile usare i parametri di comando. Ad esempio, un processo può copiare solo un subset di directory usando il parametro include path
come parte del comando azcopy copy.
Usare il parametro include-pattern
per copiare i file con estensione specifica, ad esempio *.pdf
. In un processo separato usare il parametro exclude-pattern
per copiare tutti i file che non dispongono di estensione *.pdf
. Per esempi, vedere Caricare file specifici e Scaricare BLOB specifici.
Dopo aver deciso come dividere processi di grandi dimensioni in quelli più piccoli, prendere in considerazione l'esecuzione di processi in più di una macchina virtuale.
Aumentare la concorrenza
Se si caricano o si scaricano file, usare la variabile di ambiente AZCOPY_CONCURRENCY_VALUE
per aumentare il numero di richieste simultanee che possono verificarsi nel computer. Impostare questa variabile il più alto possibile senza compromettere le prestazioni del computer. Per altre informazioni su questa variabile, vedere la sezione Aumentare il numero di richieste simultanee di questo articolo.
Se si copiano BLOB tra account di archiviazione, è consigliabile impostare il valore della variabile di ambiente AZCOPY_CONCURRENCY_VALUE
su un valore maggiore di 1000
. È possibile impostare questa variabile elevata perché AzCopy usa API da server a server, quindi i dati vengono copiati direttamente tra server di archiviazione e non usano la potenza di elaborazione del computer.
Ridurre il numero di log generati
È possibile migliorare le prestazioni riducendo il numero di voci di log create da AzCopy durante il completamento di un'operazione. Per impostazione predefinita, AzCopy registra tutte le attività correlate a un'operazione. Per ottenere prestazioni ottimali, è consigliabile impostare il parametro --log-level
del comando di copia, sincronizzazione o rimozione su ERROR
. In questo modo, AzCopy registra solo gli errori. Per impostazione predefinita, il livello di log dei valori è impostato su INFO
.
Disattivare il controllo della lunghezza
Se si caricano o scaricano file, è consigliabile impostare il parametro --check-length
dei comandi di copia e sincronizzazione su false
. Ciò impedisce ad AzCopy di verificare la lunghezza di un file dopo un trasferimento. Per impostazione predefinita, AzCopy controlla la lunghezza per assicurarsi che i file di origine e di destinazione corrispondano dopo il completamento di un trasferimento. AzCopy esegue questo controllo dopo ogni trasferimento di file. Questo controllo può ridurre le prestazioni quando i processi trasferiscono un numero elevato di file di piccole dimensioni.
Attivare l'analisi locale simultanea (Linux)
Le analisi dei file in alcuni sistemi Linux non vengono eseguite abbastanza velocemente per saturare tutte le connessioni di rete parallele. In questi casi, è possibile impostare il parametro AZCOPY_CONCURRENT_SCAN
su un numero maggiore.
Aumentare il numero di richieste simultanee
È possibile aumentare la velocità effettiva impostando la variabile di ambiente AZCOPY_CONCURRENCY_VALUE
. Questa variabile specifica il numero di richieste simultanee che possono verificarsi.
Se il computer ha meno di cinque CPU, il valore di questa variabile viene impostato su 32
. Altrimenti, il valore predefinito è pari a 16 moltiplicato per il numero di CPU. Il valore predefinito massimo di questa variabile è 3000
, ma è possibile impostare manualmente questo valore superiore o inferiore.
Sistema operativo | Comando |
---|---|
Windows | set AZCOPY_CONCURRENCY_VALUE=<value> |
Linux | export AZCOPY_CONCURRENCY_VALUE=<value> |
macOS | export AZCOPY_CONCURRENCY_VALUE=<value> |
Usare azcopy env
per controllare il valore corrente di questa variabile. Se il valore è vuoto, è possibile leggere il valore usato esaminando l'inizio di qualsiasi file di log di AzCopy. In quest'area viene segnalato il valore selezionato e il motivo per cui è stato selezionato.
Prima di impostare questa variabile, è consigliabile eseguire una prova comparativa. Il processo della prova comparativa segnala il valore di concorrenza consigliato. In alternativa, se le condizioni di rete e i payload variano, impostare questa variabile sulla parola AUTO
anziché su un determinato numero. In questo modo, AzCopy eseguirà sempre lo stesso processo automatico di ottimizzazione usato nelle prove comparative.
Limitare la velocità effettiva dei dati
È possibile usare il flag cap-mbps
nei comandi per posizionare un limite massimo sulla velocità effettiva dei dati. Ad esempio, il comando seguente riprende una velocità effettiva del processo e il limite di velocità effettiva per 10
megabit (Mb) al secondo.
azcopy jobs resume <job-id> --cap-mbps 10
Ottimizzare l'uso della memoria
Impostare la variabile di ambiente AZCOPY_BUFFER_GB
per specificare la quantità massima di memoria di sistema da usare da AzCopy per il buffer durante il download e il caricamento dei file. Esprimere questo valore in gigabyte (GB).
Sistema operativo | Comando |
---|---|
Windows | set AZCOPY_BUFFER_GB=<value> |
Linux | export AZCOPY_BUFFER_GB=<value> |
macOS | export AZCOPY_BUFFER_GB=<value> |
Nota
Il rilevamento dei processi comporta sempre un sovraccarico aggiuntivo nell'utilizzo della memoria. L'importo varia in base al numero di trasferimenti in un processo. I buffer sono il componente più grande dell'utilizzo della memoria. È possibile controllare l'overhead usando AZCOPY_BUFFER_GB
per soddisfare approssimativamente i requisiti, ma non è disponibile alcun flag per limitare rigorosamente l'utilizzo complessivo della memoria.
Ottimizzare la sincronizzazione dei file
Il comando sync identifica tutti i file nella destinazione e quindi confronta i nomi di file e i timestamp dell'ultima modifica prima dell'avvio dell'operazione di sincronizzazione. Se si dispone di un numero elevato di file, è possibile migliorare le prestazioni eliminando questa elaborazione iniziale.
A tale scopo, usare invece il comando azcopy copy e impostare il flag --overwrite
su ifSourceNewer
. AzCopy confronta i file man mano che vengono copiati senza eseguire analisi e confronti iniziali. Ciò offre un margine di prestazioni nei casi in cui sono presenti un numero elevato di file da confrontare.
Il comando azcopy copy non elimina i file dalla destinazione, quindi per eliminare i file nella destinazione quando non esistono più nell'origine, usare il comando azcopy sync con il flag --delete-destination
impostato su un valore true
o prompt
.
Usare più client per eseguire processi in parallelo
AzCopy offre prestazioni ottimali quando viene eseguita una sola istanza nel client. Per trasferire i file in parallelo, usare più client ed eseguire una sola istanza di AzCopy in ognuno di essi.