Otimizar o desempenho do AzCopy com o Armazenamento do Microsoft Azure

AzCopy é um utilitário de linha de comando que você pode usar para copiar blobs ou arquivos de ou para uma conta de armazenamento. Este artigo ajuda você a otimizar o desempenho.

Observação

Se estiver procurando conteúdo para ajudar a começar a usar o AzCopy, confira Introdução ao AzCopy

Você pode obter o desempenho do parâmetro de comparação e usar comandos e variáveis de ambiente para encontrar uma compensação ideal entre o consumo de recursos e o desempenho.

Executar testes de parâmetro de comparação

Você pode executar um teste de parâmetro de comparação de desempenho em contêineres de blob ou compartilhamentos de arquivos específicos para exibir estatísticas gerais de desempenho e para identificar gargalos de desempenho. Você pode executar o teste carregando ou baixando dados de teste gerados.

Use o comando a seguir para executar um teste de parâmetro de comparação de desempenho.

Sintaxe

azcopy benchmark 'https://<storage-account-name>.blob.core.windows.net/<container-name>'

Exemplo

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'

Dica

Este exemplo inclui argumentos de caminho com aspas simples (''). Use aspas simples em todos os shells de comando, exceto pelo shell de comando do Windows (cmd.exe). Se você estiver usando um shell de comando do Windows (cmd.exe), coloque os argumentos de caminho entre aspas duplas ("") em vez de aspas simples ('').

Este comando executa um parâmetro de comparação de desempenho com o upload dos dados de teste de um destino especificado. Os dados de teste são gerados na memória, carregados no destino e, em seguida, excluídos do destino após a conclusão do teste. Você pode especificar quantos arquivos serão gerados e qual tamanho você gostaria que eles tivessem usando parâmetros de comando opcionais.

Se você preferir executar esse teste baixando dados, defina o parâmetro mode como download. Para obter documentos de referência detalhados, confira parâmetro de comparação do azcopy.

Otimizar para um grande número de arquivos

A taxa de transferência pode diminuir ao transferir um grande número de arquivos. Cada operação de cópia se traduz em uma ou mais transações que devem ser executadas no serviço de armazenamento. Quando você estiver transferindo um grande número de arquivos, considere o número de transações que precisam ser executadas e qualquer impacto potencial que essas transações possam ter se outras atividades estiverem ocorrendo na conta de armazenamento ao mesmo tempo.

Para maximizar o desempenho, você pode reduzir o tamanho de cada trabalho limitando o número de arquivos copiados em um único trabalho. Para operações de download e upload, aumente a simultaneidade conforme necessário, diminua a atividade de log e desative os recursos que incorrem em altos custos de desempenho.

Reduzir o tamanho de cada trabalho

Para obter o desempenho ideal, verifique se cada trabalho transfere menos de 10 milhões arquivos. Trabalhos que transferem mais de 50 milhões arquivos podem funcionar inadequadamente porque o mecanismo de rastreamento de trabalho do AzCopy provoca uma quantidade significativa de sobrecarga. Para reduzir a sobrecarga, considere dividir trabalhos grandes em menores.

Uma maneira de reduzir o tamanho de um trabalho é limitar o número de arquivos afetados por um trabalho. Você pode usar parâmetros de comando para fazer isso. Por exemplo, um trabalho pode copiar apenas um subconjunto de diretórios usando o parâmetro include path como parte do comando azcopy copy.

Use o parâmetro include-pattern para copiar arquivos que têm uma extensão específica (por exemplo: *.pdf). Em um trabalho separado, use o parâmetro exclude-pattern para copiar todos os arquivos sem a extensão *.pdf. Consulte Carregar arquivos específicos e Baixar blobs específicos para obter exemplos.

Depois de decidir como dividir trabalhos grandes em menores, considere a execução de trabalhos em mais de uma VM (máquina virtual).

Aumentar a simultaneidade

Se você estiver carregando ou baixando arquivos, use a variável de ambiente AZCOPY_CONCURRENCY_VALUE para aumentar o número de solicitações simultâneas que podem ocorrer em seu computador. Defina essa variável como a mais alta possível sem comprometer o desempenho de seu computador. Para saber mais sobre essa variável, consulte a seção Aumentar o número de solicitações simultâneas deste artigo.

Se você estiver copiando blobs entre contas de armazenamento, considere definir o valor da variável de ambiente AZCOPY_CONCURRENCY_VALUE para um valor maior que 1000. Você pode definir essa variável como alta porque o AzCopy usa APIs de servidor para servidor, para que os dados sejam copiados diretamente entre os servidores de armazenamento e não usem a capacidade de processamento do computador.

Diminuir o número de logs gerados

Você pode melhorar o desempenho reduzindo o número de entradas de log que o AzCopy cria à medida que conclui uma operação. Por padrão, o AzCopy registra em log todas as atividades relacionadas a uma operação. Para obter um desempenho ideal, considere definir o parâmetro --log-level de seu comando de cópia, sincronização ou remoção como ERROR. Dessa forma, o AzCopy registra apenas os erros. Por padrão, o nível de log do valor é definido como INFO.

Desativar a verificação de comprimento

Se você estiver carregando ou baixando arquivos, considere definir o --check-length dos comandos de copiar e sincronizar como false. Isso impede que o AzCopy verifique o comprimento de um arquivo após uma transferência. Por padrão, o AzCopy verifica o comprimento para garantir que os arquivos de origem e destino coincidam após a conclusão de uma transferência. O AzCopy executa essa verificação após cada transferência de arquivo. Essa verificação pode prejudicar o desempenho quando os trabalhos transferem grandes números de arquivos pequenos.

Ativar a verificação local simultânea (Linux)

As verificações de arquivo em alguns sistemas Linux não são executadas com rapidez suficiente para saturar todas as conexões de rede paralelas. Nesses casos, você pode definir o AZCOPY_CONCURRENT_SCAN como um número mais alto.

Aumentar o número de solicitações simultâneas

Para aumentar a taxa de transferência, defina a variável de ambiente AZCOPY_CONCURRENCY_VALUE. Essa variável especifica o número de solicitações simultâneas que podem ocorrer.

Se o computador tiver menos de 5 CPUs, o valor dessa variável será definido como 32. Caso contrário, o valor padrão é igual a 16 multiplicado pelo número de CPUs. O valor padrão máximo dessa variável é 3000, mas você pode aumentar ou reduzir esse valor manualmente.

Sistema operacional Comando
Windows set AZCOPY_CONCURRENCY_VALUE=<value>
Linux export AZCOPY_CONCURRENCY_VALUE=<value>
macOS export AZCOPY_CONCURRENCY_VALUE=<value>

Use azcopy env para verificar o valor atual dessa variável. Se o valor estiver em branco, você poderá ler qual valor está em uso se observar o início de um arquivo de log do AzCopy. O valor selecionado e o motivo da seleção estão relatados lá.

Antes de definir essa variável, recomendamos executar um teste de parâmetro de comparação. O processo do teste de parâmetro de comparação informará o valor de simultaneidade recomendado. Como alternativa, se as condições de rede e as cargas variarem, defina essa variável como a palavra AUTO em vez de um número específico. Isso fará com que o AzCopy sempre execute o mesmo processo de ajuste automático que ele usa nos testes de parâmetro de comparação.

Limitar a taxa de dados da taxa de transferência

Você pode usar o sinalizador cap-mbps nos seus comandos para inserir um limite na taxa de dados da taxa de transferência. Por exemplo, o comando a seguir retoma um trabalho e limita a taxa de transferência a 10 megabits (Mb) por segundo.

azcopy jobs resume <job-id> --cap-mbps 10

Otimizar o uso de memória

Defina a variável de ambiente AZCOPY_BUFFER_GB para especificar a quantidade máxima de memória do sistema que você quer que o AzCopy use para o armazenamento em buffer ao baixar e carregar arquivos. Expresse esse valor em gigabytes (GB).

Sistema operacional Comando
Windows set AZCOPY_BUFFER_GB=<value>
Linux export AZCOPY_BUFFER_GB=<value>
macOS export AZCOPY_BUFFER_GB=<value>

Observação

O acompanhamento de trabalhos sempre causa mais utilização de memória. A quantidade varia de acordo com o número de transferências do trabalho. Os buffers são o maior componente no uso da memória. Você pode ajudar a controlar a sobrecarga usando AZCOPY_BUFFER_GB o para atender aproximadamente às suas necessidades, mas não há nenhum sinalizador disponível para limitar estritamente o uso de memória geral.

Otimizar a sincronização de arquivos

O comando sync identifica todos os arquivos no destino e compara os nomes de arquivo e os últimos carimbos de data/hora antes de iniciar a operação de sincronização. Se você tiver um grande número de arquivos, poderá melhorar o desempenho se eliminar esse processamento antecipado.

Para fazer isso, use o comando azcopy copy e defina o sinalizador --overwrite como ifSourceNewer. O AzCopy comparará os arquivos à medida que eles forem copiados sem executar verificações e comparações prévias. Isso oferece um pequeno aumento de desempenho em casos em que há um grande número de arquivos a comparar.

O comando azcopy copy não exclui arquivos do destino, portanto, se você quiser excluir arquivos no destino quando eles não existirem na origem, use o comando de azcopy sync com o sinalizador --delete-destination definido com um valor de true ou prompt.

Usar vários clientes para executar trabalhos em paralelo

O AzCopy funciona melhor quando apenas uma instância é executada no cliente. Se quiser transferir arquivos em paralelo, use vários clientes e execute apenas uma instância do AzCopy em cada um deles.

Confira também