Condividi tramite


Linee guida per l'ottimizzazione delle prestazioni per l'uso di PowerShell con Azure Data Lake Storage Gen1

Questo articolo descrive le proprietà che è possibile ottimizzare per ottenere prestazioni migliori usando PowerShell per lavorare con Data Lake Storage Gen1.

Annotazioni

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Proprietà Impostazione predefinita Descrizione
PerFileThreadCount 10 Questo parametro consente di scegliere il numero di thread paralleli per il caricamento o il download di ogni file. Questo numero rappresenta il numero massimo di thread che possono essere allocati per ogni file, ma è possibile ottenere un minor numero di thread a seconda dello scenario, ad esempio se si carica un file da 1 KB, si ottiene un thread anche se si richiedono 20 thread.
ConcurrentFileCount 10 Questo parametro è specifico per il caricamento o il download di cartelle. Questo parametro determina il numero di file simultanei che possono essere caricati o scaricati. Questo numero rappresenta il numero massimo di file simultanei che possono essere caricati o scaricati contemporaneamente, ma è possibile ottenere meno concorrenza a seconda dello scenario(ad esempio, se si caricano due file, si ottengono due caricamenti simultanei anche se si richiede 15).

Esempio:

Questo comando scarica i file da Data Lake Storage Gen1 all'unità locale dell'utente usando 20 thread per file e 100 file simultanei.

Export-AzDataLakeStoreItem -AccountName "Data Lake Storage Gen1 account name" `
    -PerFileThreadCount 20 `
	-ConcurrentFileCount 100 `
	-Path /Powershell/100GB `
	-Destination C:\Performance\ `
	-Force `
	-Recurse

Come determinare i valori delle proprietà

La domanda successiva che si potrebbe avere è come determinare quale valore fornire per le proprietà correlate alle prestazioni. Ecco alcune linee guida che è possibile usare.

  • Passaggio 1: determinare il numero totale di thread : iniziare calcolando il numero totale di thread da usare. Come linea guida generale, è consigliabile usare sei thread per ogni core fisico.

    Total thread count = total physical cores * 6

    Esempio:

    Supponendo di eseguire i comandi di PowerShell da una macchina virtuale D14 con 16 core

    Total thread count = 16 cores * 6 = 96 threads

  • Passaggio 2: Calcolare PerFileThreadCount : viene calcolato il Valore PerFileThreadCount in base alle dimensioni dei file. Per i file di dimensioni inferiori a 2,5 GB, non è necessario modificare questo parametro perché il valore predefinito di 10 è sufficiente. Per i file di dimensioni superiori a 2,5 GB, è consigliabile usare 10 thread come base per il primo 2,5 GB e aggiungere 1 thread per ogni aumento di 256 MB di dimensioni del file. Se si copia una cartella con un'ampia gamma di dimensioni dei file, è consigliabile raggrupparle in dimensioni di file simili. La presenza di dimensioni di file diverse può causare prestazioni non ottimali. Se non è possibile raggruppare dimensioni di file simili, è necessario impostare PerFileThreadCount in base alle dimensioni massime del file.

    PerFileThreadCount = 10 threads for the first 2.5 GB + 1 thread for each additional 256 MB increase in file size

    Esempio:

    Supponendo di avere 100 file compresi tra 1 GB e 10 GB, si usano i 10 GB come dimensione massima del file per l'equazione, come illustrato di seguito.

    PerFileThreadCount = 10 + ((10 GB - 2.5 GB) / 256 MB) = 40 threads

  • Passaggio 3: Calcolare ConcurrentFilecount : usare il numero totale di thread e PerFileThreadCount per calcolare ConcurrentFileCount in base all'equazione seguente:

    Total thread count = PerFileThreadCount * ConcurrentFileCount

    Esempio:

    In base ai valori di esempio usati

    96 = 40 * ConcurrentFileCount

    Quindi, ConcurrentFileCount è 2.4, che possiamo arrotondare a 2.

Ulteriore ottimizzazione

È possibile che sia necessaria un'ulteriore ottimizzazione perché è disponibile un intervallo di dimensioni del file da usare. Il calcolo precedente funziona bene se tutti o la maggior parte dei file sono più grandi e più vicini all'intervallo di 10 GB. Se invece ci sono molte dimensioni di file diverse con molti file più piccoli, è possibile ridurre PerFileThreadCount. Riducendo PerFileThreadCount, è possibile aumentare ConcurrentFileCount. Pertanto, se si presuppone che la maggior parte dei file sia più piccola nell'intervallo di 5 GB, è possibile ripetere il calcolo:

PerFileThreadCount = 10 + ((5 GB - 2.5 GB) / 256 MB) = 20

Quindi, ConcurrentFileCount diventa 96/20, ovvero 4,8, arrotondato a 4.

È possibile continuare a ottimizzare queste impostazioni modificando PerFileThreadCount in base alla distribuzione delle dimensioni del file.

Limitazione

  • Il numero di file è minore di ConcurrentFileCount: se il numero di file che si sta caricando è minore di ConcurrentFileCount calcolato, è necessario ridurre ConcurrentFileCount in modo che sia uguale al numero di file. È possibile usare tutti i thread rimanenti per aumentare PerFileThreadCount.

  • Troppi thread: se si aumenta il numero di thread troppo senza aumentare le dimensioni del cluster, si rischia di ridurre le prestazioni. Possono verificarsi problemi di contesa durante il cambio di contesto sulla CPU.

  • Concorrenza insufficiente: se la concorrenza non è sufficiente, il cluster potrebbe essere troppo piccolo. È possibile aumentare il numero di nodi nel cluster, che offre maggiore concorrenza.

  • Errori di limitazione: se la concorrenza è troppo elevata, potrebbero verificarsi errori di limitazione. Se vengono visualizzati errori di limitazione, è consigliabile ridurre la concorrenza o contattare Microsoft.

Passaggi successivi