Partilhar via


Orientações de otimização do desempenho para utilizar o PowerShell com o Azure Data Lake Storage Gen1

Este artigo descreve as propriedades que pode otimizar para obter um melhor desempenho ao utilizar o PowerShell para trabalhar com Data Lake Storage Gen1.

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Propriedade Predefinição Description
PerFileThreadCount 10 Este parâmetro permite-lhe escolher o número de threads paralelos para carregar ou transferir cada ficheiro. Este número representa o máximo de threads que podem ser alocados por ficheiro, mas poderá obter menos threads consoante o seu cenário (por exemplo, se estiver a carregar um ficheiro de 1 KB, obtém um thread mesmo que peça 20 threads).
ConcurrentFileCount 10 Este parâmetro destina-se especificamente ao carregamento ou transferência de pastas. Este parâmetro determina o número de ficheiros simultâneos que podem ser carregados ou transferidos. Este número representa o número máximo de ficheiros simultâneos que podem ser carregados ou transferidos de uma só vez, mas poderá obter menos simultaneidade consoante o seu cenário (por exemplo, se estiver a carregar dois ficheiros, receberá dois carregamentos simultâneos mesmo que peça 15).

Exemplo:

Este comando transfere ficheiros de Data Lake Storage Gen1 para a unidade local do utilizador com 20 threads por ficheiro e 100 ficheiros simultâneos.

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

Como determinar valores de propriedade

A próxima pergunta que poderá ter é como determinar qual o valor a fornecer para as propriedades relacionadas com o desempenho. Eis algumas orientações que poderá utilizar.

  • Passo 1: determinar a contagem total de threads – comece por calcular a contagem total de threads a utilizar. Como orientação geral, deve utilizar seis threads para cada núcleo físico.

    Total thread count = total physical cores * 6

    Exemplo:

    Partindo do princípio de que está a executar os comandos do PowerShell a partir de uma VM D14 que tem 16 núcleos

    Total thread count = 16 cores * 6 = 96 threads

  • Passo 2: Calcular PerFileThreadCount - Calculamos a nossa PerFileThreadCount com base no tamanho dos ficheiros. Para ficheiros inferiores a 2,5 GB, não é necessário alterar este parâmetro porque a predefinição de 10 é suficiente. Para ficheiros com mais de 2,5 GB, deve utilizar 10 threads como base para os primeiros 2,5 GB e adicionar 1 thread para cada aumento adicional de 256 MB no tamanho do ficheiro. Se estiver a copiar uma pasta com uma grande variedade de tamanhos de ficheiros, considere agrupá-los em tamanhos de ficheiro semelhantes. Ter tamanhos de ficheiro diferentes pode causar um desempenho não ideal. Se não for possível agrupar tamanhos de ficheiros semelhantes, deve definir PerFileThreadCount com base no tamanho de ficheiro maior.

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

    Exemplo:

    Partindo do princípio de que tem 100 ficheiros entre 1 GB e 10 GB, utilizamos os 10 GB como o maior tamanho de ficheiro para a equação, que seria semelhante ao seguinte.

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

  • Passo 3: Calcular ConcurrentFilecount – utilize a contagem total de threads e PerFileThreadCount para calcular ConcurrentFileCount com base na seguinte equação:

    Total thread count = PerFileThreadCount * ConcurrentFileCount

    Exemplo:

    Com base nos valores de exemplo que temos estado a utilizar

    96 = 40 * ConcurrentFileCount

    Por isso, ConcurrentFileCount é 2,4, que podemos arredondar para 2.

Otimização adicional

Poderá necessitar de otimização adicional porque existe uma grande variedade de tamanhos de ficheiro com os quais trabalhar. O cálculo anterior funciona bem se todos ou a maioria dos ficheiros forem maiores e mais próximos do intervalo de 10 GB. Se, em vez disso, existirem vários tamanhos de ficheiro diferentes com muitos ficheiros mais pequenos, poderia reduzir a PerFileThreadCount. Ao reduzir a PerFileThreadCount, podemos aumentar a ConcurrentFileCount. Por isso, se assumirmos que a maioria dos nossos ficheiros são mais pequenos no intervalo de 5 GB, podemos refazer o nosso cálculo:

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

Assim, ConcurrentFileCount torna-se 96/20, que é 4.8, arredondado para 4.

Pode continuar a otimizar estas definições, alterando a PerFileThreadCount para cima e para baixo consoante a distribuição dos tamanhos de ficheiro.

Limitação

  • O número de ficheiros é menor que ConcurrentFileCount: se o número de ficheiros que está a carregar for menor que a ConcurrentFileCount que calculou, deve reduzir a ConcurrentFileCount para ser igual ao número de ficheiros. Pode utilizar quaisquer threads restantes para aumentar a PerFileThreadCount.

  • Existem demasiados threads: se aumentar demasiado a contagem de threads sem aumentar o tamanho do cluster, corre o risco de degradar o desempenho. Podem existir problemas de contenção ao alternar de contexto na CPU.

  • Simultaneidade insuficiente: se a simultaneidade não for suficiente, significa que o cluster pode ser demasiado pequeno. Pode aumentar o número de nós no cluster, o que lhe dá mais simultaneidade.

  • Erros de limitação: poderá ver erros de limitação se a simultaneidade for demasiado elevada. Se vir erros de limitação, deverá reduzir a simultaneidade ou contactar a Microsoft.

Passos seguintes